实体框架(以及我使用它的 RIA 服务)很好地支持继承。数据库映射可以是单表或多表,并且在第一种情况下,数据库表包括包含类型指示符的指示符列。
显然,这个指示符在模型中是不可见的,尽管人们希望使用它来进行排序和分组。
如果这是我想要做的,我是否必须在基类中引入一个额外的显式类型指示符,或者是否有更好的方法以某种方式按类型排序或分组?
我正在使用 EF5。
是的,我可以想象您需要基本类型列表的场景。不幸的是,无法在概念模型中获得鉴别器(指示符)。我能想到的唯一方法就是
db.BaseObjects.Where(b => ...)
.AsEnumerable().Select (b => new {b.GetType().Name, b } )
之后,您可以按类型名称进行排序/分组。但你不能投影(Select
) 之前AsEnumerable
,所以限制数据大小的唯一方法是过滤(Where
).
有一个技巧可以将鉴别器列作为类模型中的可见属性。您可以创建一个计算列 http://msdn.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx在表中,仅显示真实鉴别器列的值,并将其映射到标记为的属性DatabaseGeneratedOption.Computed
.
注意,这需要特别注意 http://geekswithblogs.net/DavidPaquette/archive/2012/09/23/calculated-columns-in-entity-framework-code-first-migrations.aspx代码优先(迁移)。插入和更新需要一定的性能,因为 EF 之后必须从数据库读取值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)