2012-07-18 153 views
1

是否可以在EF实体中包含计算字段?例如,假设我有一家商店销售产品,并且这些产品分为几类。实体框架,计算实体字段

当显示类别列表供店铺管理员编辑时,我希望列出每个类别中产品的数量作为列表的一部分。

在NHibernate中,我会使用一个公式,例如

<property name="Products" formula="dbo.Category_NumProducts(id)" /> 

如果类似的东西可能用于EF,我无法解决。我知道我可以创建一个类别视图,并将其映射到第二个实体,但这似乎是错误的,因为它几乎是一个完整的重复。

编辑:如果这在EF中不可行,那么完成此操作的最佳方法是什么?

回答

2

不幸的是,如果你的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() 
      }; 
+0

确定感谢,那就是我得到的印象。你提到的方法(查看,定义查询等),解决这个问题的正确方法是什么?我只是检查我没有从错误的角度来看待它。干杯 – 2012-07-18 09:37:06

+0

我添加了一些例子,我将如何解决这个问题。 – 2012-07-18 10:08:59

+0

好的,这是有道理的,因为我使用的存储库模式我可能需要创建第二个实体,就像你最初的建议。嗯,它使我像NHibernate越来越多,我从来没有喜欢它:) – 2012-07-18 10:23:01