在C#中创建一个简单类以从SQL收集数据

在C#中创建一个简单类以从SQL收集数据,c#,class,C#,Class,我正在努力学习定义类的正确方法。我有两个类,其中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; } pub

我正在努力学习定义类的正确方法。我有两个类,其中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中有两个表,基本上是Person表和Client表,其字段与c#中定义的字段类似

现在我想添加一些方法(GetClient()和类似的方法)来实际获取客户机信息,但由于要获取所有客户机信息,我需要首先获取所有人员信息。在SQL中,我会使用JOIN进行查询,我可以直接将客户机信息与个人信息连接起来。我基本上是这样做的:

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

还是我应该换一种方式

这里有多种选择:

O/R映射 使用框架从数据库布局生成类。扩展类以添加您自己的功能和额外属性。实现这一点的一些框架包括:

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

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

在这里,可以让事情变得更简单。

您看过像LinqToSql、Entity Framework和NHibernate这样的ORM吗?他们会帮你处理这一切的。我刚才试过NHibernate,但我无法摆脱它。以某种方式编写一个简单的查询,以获得所有看起来更简单的内容(因为我已经这样做了2年多了).在过去的两年中,我一直在手工编写查询并将结果分配给字符串等。我现在尝试使用NHibernate,但在实际掌握如何正确使用它时遇到了一些问题。@MadBoy使用ORM有一个学习曲线-但在大多数情况下值得努力。如果NHibernate看起来很难,那么可以看看Dapper-。我现在开始使用实体框架。我要说的是,这两个数据库似乎有问题,它们有很多共同的数据库名称、相同的列,并且在c#中发现这些名称已经在使用(360个错误).@MadBoy在单独的名称空间中创建两个不同的数据库模型,这样你就不会得到一个clashAm我理解正确,使用实体框架,我不必自己定义类Person和类Client,但我可以依赖实体提供的任何东西?