实体框架继承:按类型排序/分组?

Joh*_*ohn 5 entity-framework

实体框架(和 RIA 服务,我使用它)很好地支持继承。数据库映射可以是单表或多表,在第一种情况下,数据库表包括一个包含类型指示符的指示符列。

显然,这个指示符在模型中是不可见的,即使它是人们想要订购和分组的东西。

如果这是我想要做的,我是否必须在基类中引入一个额外的显式类型指示符,或者是否有更好的方法来以某种方式按类型排序或分组?

我正在使用 EF5。

Ger*_*old 2

是的,我可以想象您需要基本类型列表的场景。不幸的是,无法在概念模型中获得鉴别器(指示符)。我能想到的唯一方法就是

db.BaseObjects.Where(b => ...)
  .AsEnumerable().Select (b => new {b.GetType().Name, b } )
Run Code Online (Sandbox Code Playgroud)

之后,您可以按类型名称进行排序/分组。但不能将 ( Select) 投影到 之前AsEnumerable,因此限制数据大小的唯一方法是过滤 ( Where)。

有一个技巧可以将鉴别器列作为类模型中的可见属性。您可以在表中创建一个计算列DatabaseGeneratedOption.Computed,该列仅显示真实鉴别器列的值,并将其映射到标记为 的属性。

请注意,这需要特别注意代码优先(迁移)。插入和更新需要一定的性能,因为 EF 之后必须从数据库读取值。