2013-04-05 73 views
4

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

显然,这标志是不是在模型中可见,即使它的东西,一想就在ORDER BY和GROUP在订购。

难道我如果这就是我想要做的还是有更好的方式来订购或组以某种方式的类型,介绍在基类中有其他的类型的标志?

我正在使用EF5。

回答

2

是的,我可以想象你想要一个基本类型列表的场景。不幸的是,在概念模型中没有办法得到鉴别器(标识符)。我能想到的唯一方法就像

db.BaseObjects.Where(b => ...) 
    .AsEnumerable().Select (b => new {b.GetType().Name, b }) 

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

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

请注意,这需要special attention与代码优先(迁移)。插入和更新需要一些性能,因为EF必须事后读取数据库中的值。