我正在使用具有下表的数据库模型:
- 摩托车,
- 汽车,
- 飞机
当我生成 ADO.NET 实体数据模型edmx
文件时,我为每个表获得了一个单独的 C# 类。上述所有类共享相同的属性(如 MaxSpeed)。我想通过创建一个 Vehicle
基类,并将公共(public)属性和方法移植到这个基类来引入多态性。
我不能更改数据库,因为它不支持继承。有没有办法做到这一点?
我使用 .NET 4.0 和 SQL Server 2008。
最佳答案
如果你真的不能改变你的数据库,那么每个具体类继承的表就是你必须做的,但这很棘手。
宽大已提供this example它在行动中,这看起来真的很好。通常,每个具体类型表的一个问题是您的每种具体类型(汽车、飞机、摩托车)都必须具有唯一的键。换句话说,如果有 id = 5 的汽车,则不可能有该 id 的摩托车或飞机。因此,对于三个表,您可能必须使用 guid,或者正如 Ladislav 指出的那样,在您的标识列上适本地设置种子和增量值(种子 = 1、2 和 3,增量 = 3)
理想情况下,您希望(更改您的数据库并)添加一个具有共同属性的新表,并让它作为您的基类,车辆、汽车等都继承它。 EF 更容易支持该方法(称为每个层次结构的表)。
关于c# - 如何将多态引入实体数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034753/