在c#中创建一个简单的类来从SQL中收集数据

本文关键字:SQL 数据 一个 创建 简单 | 更新日期: 2023-09-27 18:15:32

我正在努力学习定义类的正确方法。我有两个类,其中Person是关于Person的所有可能信息的定义,而Client使用来自Person的信息并与Person高度连接。

public class Person {
    public virtual int ID { get; set; }
    public virtual string FirmaNazwa { get; set; }
    public virtual string Imie { get; set; }
    public virtual string Nazwisko { get; set; }
    public virtual Adres Adres { get; set; }
    public virtual Adres AdresKorespondencyjny { get; set; }
    public virtual UrzadSkarbowy UrzadSkarbowy { get; set; }
    public virtual string Pesel { get; set; }
    public virtual string Nip { get; set; }
    public virtual string Regon { get; set; }
    public virtual string Krs { get; set; }
    public virtual DateTime KrsData { get; set; }
    public virtual string KrsOznaczenie { get; set; }
    public virtual string Rodzaj { get; set; } // Typ klienta (Firma / Osoba)
    public virtual string Narodowosc { get; set; }
    public virtual string ZgodaNaPrzetwarzanieDanychOsobowych { get; set; }
    public virtual string ZgodaNaPrzetwarzanieDanychOsobowychMarketing { get; set; }
    public virtual Pracownik Uzytkownik { get; set; }
    public virtual DateTime DataZmiany { get; set; } 
}
public sealed class Client {
    public int ID { get; set; }
    public Person Person { get; set; }
    public Pracownik Uzytkownik { get; set; }
    public DateTime DataZmiany { get; set; }
    public string Haslo { get; set; }
    public string Typ { get; set; }
    public void GetClient() {
    }
}

我在SQL中有2个表,基本上是与c#中定义的字段相似的Person和Client表。

现在我想添加一些方法(GetClient()和类似的)来实际获取客户端信息,但由于要获取所有客户端信息,我需要首先获取所有Person信息。在SQL中,我会用JOIN的查询,我有点得到与Person信息直接连接的客户信息。那么我是否应该这样做:

    public void GetClient() {
        //SQLQUERYHERE
        Person podmiot = new Person();
        podmiot.FirmaNazwa = ...
        podmiot.Imie = ...
        Haslo = "test";
    }

或者我应该做不同的?

在c#中创建一个简单的类来从SQL中收集数据

这里有各种选项:

O/R映射

使用框架从数据库布局生成类。扩展这些类以添加您自己的功能和额外属性。一些框架可以这样做:

  • 实体框架
  • NHibernate
  • LLBLGen
  • 使用O/R设计器的LINQ to SQL

自己编写代码

您也可以编写自己的查询,但出于学习目的(有时是为了简单,减少开销和依赖性),这是不太推荐的方法。您可以使用使用查询结果填充的DataReader,并手动分配属性:

foo.Bar = dataReader["Bar"].ToString()

Enterprise Library可以让事情变得简单一些。