我正在使用具有以下表格的数据库模型:
当我生成ADO.NET实体数据模型edmx
文件时,我会为每个表获得一个单独的C#类。所有上述类共享相同的属性(如MaxSpeed)。我想介绍一个polimorphism,通过创建一个Vehicle
基类,并为这个基类移植公共属性和方法。
我无法更改数据库,因为它不支持继承。有没有办法实现这个目标?
我使用的是.NET 4.0和SQL Server 2008。
答案 0 :(得分:2)
如果你真的无法更改你的数据库,那么每个具体的类继承表是你必须要做的,但这很棘手。
宽恕提供了this example的实际行动,这似乎非常好。每种混凝土类型的桌子一般存在的一个问题是每种混凝土类型 - 汽车,飞机,摩托车 - 每个都必须有唯一的钥匙。换句话说,如果有一辆id = 5的汽车,那么就没有摩托车或具有该id的飞机。所以有了三个表你可能要么使用guid,要么就像Ladislav指出的那样,在你的标识列上设置你的种子并适当增加值(种子= 1,2和3,增量= 3)
理想情况下,您希望(更改您的数据库)添加一个包含公共属性的新表,并将其作为您的基类,车辆,汽车等都继承了该表。 EF支持每个层次结构中称为表的方法 - 更容易。
答案 1 :(得分:0)
如果您这样做,那么除非您在EF 4.1中应用代码第一个模型驱动设计,否则您将使用域对象搞乱POCO。
答案 2 :(得分:0)
最接近的是使用每实体表方法。
但是那时需要有一个Vehicle表,它可以存储ID和公共属性。这提出了一个问题:您的ID如何存储?每个表都有自己的ID吗?然后我认为使用实体层次结构是不可能的。如果您可以更改此设置,则可以使用每个实体的表格。
答案 3 :(得分:0)
您可能最好使用接口来提供对实体的访问。实体代码是自动生成的,因此您不应该经历过多的重复代码,并且您可以编写将使用该接口以常见方式处理类的方法。