C# 实体框架的关联继承

C# 实体框架的关联继承,c#,entity-framework,C#,Entity Framework,例如,考虑我的以下数据库模型 UserTable(Id、用户名) TextContentTable(Id、名称、描述、CreatedByUserId、ModifiedByUserId、TextContent) ImageContentTable(Id、名称、说明、CreatedByUserId、ModifiedByUserId、ImageContent) 我想创建以下对象模型。但这有可能吗? 例如: 基本实体(Id) DescriptiveEntity(名称、描述):BaseEntity

例如,考虑我的以下数据库模型

  • UserTable(Id、用户名)
  • TextContentTable(Id、名称、描述、CreatedByUserId、ModifiedByUserId、TextContent)
  • ImageContentTable(Id、名称、说明、CreatedByUserId、ModifiedByUserId、ImageContent)
我想创建以下对象模型。但这有可能吗? 例如:

  • 基本实体(Id)
  • DescriptiveEntity(名称、描述):BaseEntity
  • TrackedEntity(创建,修改):描述实体
  • 用户(用户名):BaseEntity
  • Text内容(Text):TrackedEntity
  • 图像内容(图像):轨迹属性
我希望您理解我的符号,但是是否可以将关联(用粗体标记)映射到各个表TextContentTable和ImageContentTable


Thanx提前发布。

对于实体框架的当前发布版本,我不确定这种方法是否是一个好主意。当一个类型(如TextContent)从一个类型(如BaseEntity)继承时,它必须具有与基类型相同的实体集。根据问题中概述的策略,应用程序中的所有实体都将具有相同的实体集。我不确定那是你想要的

然而,您可以通过接口获得大致相同的效果。例如,您可以有一个接口,它公开一个id属性。另一个接口ITrackedEntity可以公开CreatedBy和ModifiedBy。等等

这并不理想,但目前对我们来说已经足够好了。实际上,我们通过T4模板使用codegen来实现这些功能


实体框架的下一个版本可能具有一些特性,这些特性使此继承模式更易于实现,而不需要单个实体集。

我想我理解您的符号。如何将CreatedBy和ModifiedBy映射到这两个表?按照我的阅读方式,只有ImageContentTable有一个ModifiedByUserId?这是一个错误还是故意的?Oeps犯了一个错误,我将编辑我的问题。TextContentTable还必须有一个ModifiedByUserId列。首先,为您的anwser设置所有thanx。好的,我会理解这在当前的发布版本中是不可能的,但我希望MS会考虑这些类型的对象模型。我会尝试用接口来做我的事情,这远不是理想的,但我认为我现在可以接受它;-)您提到了T4模板来实现这些接口,但请解释一下。T4很简单。每个类的接口支持都是相同的。因此,我们没有剪切和粘贴它,而是有一个类名数组,我们使用T4为数组中的每个类生成代码。它生成一个实现接口的分部类。在EF的下一个版本中,我们将能够通过T4自定义EF本身使用的codegen。