c# - 如何将多态引入实体数据模型

标签 c# .net entity-framework sql-server-2008 inheritance

我正在使用具有下表的数据库模型:

  • 摩托车,
  • 汽车,
  • 飞机

当我生成 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/

相关文章:

c# - GUID 是(临时)加密的好 key 吗?

.net - WPF 数据绑定(bind) - 从父级获取值

c# - 首先使用实体​​框架代码创建数据库

c# - Backgroundworker/Control.BeginInvoke() 卡住 UI

c# - 使用 EF Core 脚手架 Oracle 数据库失败并出现登录被拒绝错误

c# - Web API - 如何删除未经授权请求的响应消息中的 WWW-Authenticate header

c# - DataGridView 是否总是依赖于列值的公共(public)属性?

c# - 哪个最好将行插入数据库?

c# - 创建一个平台来处理未知实体的 CRUD 场景

c# - 使用 C# 启用 RabbitMQ 管理插件