C# 在多态性中获取数据库数据
我有基类和多个派生类,如下所示:C# 在多态性中获取数据库数据,c#,oop,polymorphism,C#,Oop,Polymorphism,我有基类和多个派生类,如下所示: public class Person { public int Id { get; set; } public string Name { get; set; } } public class Parent : Person { public int Age { get; set; } } public class Child : Person { public int Grade { get; set; }
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Parent : Person
{
public int Age { get; set; }
}
public class Child : Person
{
public int Grade { get; set; }
public Parent Father { get; set; }
public Parent Mother { get; set; }
}
Name = reader["Name"].ToString();
Age = int.Parse(reader["Age"].ToString());
每个类在数据库中都有一个表,带有一个字段
当我想从数据库获取数据并初始化Person实例时,我需要为每个属性设置值,如下所示:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Parent : Person
{
public int Age { get; set; }
}
public class Child : Person
{
public int Grade { get; set; }
public Parent Father { get; set; }
public Parent Mother { get; set; }
}
Name = reader["Name"].ToString();
Age = int.Parse(reader["Age"].ToString());
现在,我不想在每个派生类上都这样做,但通常在基类中这样做。
最好的方法是什么?谢谢。首先,您可以在这里找到的最佳答案是:采用类似或/M的实体框架、NHibernate或Dapper(或任何其他)并将精力集中在业务上,而不是在基础架构细节上浪费时间 另一方面,如果您想要一种使用自己的代码解决问题的方法,我会说您需要创建数据映射器的概念。它将是一个类,它应该定义关系和面向对象对应项之间的映射 这样,当您尝试获取派生类时,可以实例化基类和派生类数据映射器,并调用它们以获取整个列数据:
DerivedClass derivedClassInstance = new DerivedClass();
DerivedClassDataMapper derivedMapper = new DerivedClassDataMapper(derivedClassInstance, dataReader);
derivedMapper.Fetch();
// Now your derivedClassInstance reference will contain an object which
// has both data from base and derived class...
最后,我想说,两个数据映射器都应该从DataMapper
基类继承,其中Fetch
方法应该标记为virtual
(或abstract
),以便派生数据映射器添加更多映射代码(这样,基本映射器将属性映射到基类中定义的列,派生类将重写Fetch
以添加更多映射,等等…)
无论如何,你不应该重新发明轮子,因为有实体对象关系映射器