实体框架,计算实体字段
问题描述:
是否可以在EF实体中包含计算字段?例如,假设我有一家商店销售产品,并且这些产品分为几类。实体框架,计算实体字段
当显示类别列表供店铺管理员编辑时,我希望列出每个类别中产品的数量作为列表的一部分。
在NHibernate中,我会使用一个公式,例如
<property name="Products" formula="dbo.Category_NumProducts(id)" />
如果类似的东西可能用于EF,我无法解决。我知道我可以创建一个类别视图,并将其映射到第二个实体,但这似乎是错误的,因为它几乎是一个完整的重复。
编辑:如果这在EF中不可行,那么完成此操作的最佳方法是什么?
答
不幸的是,如果你的Category
表没有这个计算列,你将无法在不创建第二个实体的情况下映射它 - 它会导致数据库视图,在EDMX中定义查询或在EDMX中定义查询视图(但Query查看可能无法工作,因为您需要计算聚合函数)。
编辑:
恕我直言,最简单的办法(也是最好的)只是建立一个ViewModel(一些非映射类)和Linq查询使用投影:
var query = from c in context.Categories
where ...
select new CategoryView {
Id = c.Id,
Name = c.Name,
...
Products = c.Products.Count()
};
确定感谢,那就是我得到的印象。你提到的方法(查看,定义查询等),解决这个问题的正确方法是什么?我只是检查我没有从错误的角度来看待它。干杯 – 2012-07-18 09:37:06
我添加了一些例子,我将如何解决这个问题。 – 2012-07-18 10:08:59
好的,这是有道理的,因为我使用的存储库模式我可能需要创建第二个实体,就像你最初的建议。嗯,它使我像NHibernate越来越多,我从来没有喜欢它:) – 2012-07-18 10:23:01