在Entity Framework 4.1中将多行组合到一个实体中

时间:2012-03-12 14:43:03

标签: c# entity-framework entity-framework-4.1

我一直在努力增加我的EF理解,从查询表到创建与我的业务对象匹配的实体,这样我就可以对我的业务对象而不是数据对象进行编码。我阅读的文章表明这​​是可能的,但他们所有的例子都相当简单,只涉及两个表格。我的情况有点复杂,我不知道该怎么办。

我有两张桌子(简化如下)

CREATE TABLE [dbo].[BarEvents]
(
[BarGUID]       UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID(),    
[Bar]               INT              NULL
)

CREATE TABLE [dbo].[BarLog]
(
[BarGUID] UNIQUEIDENTIFIER NOT NULL, 
[BarLogGUID] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID(),
[BarEventTime] DATETIME NOT NULL DEFAULT GETUTCDATE()
)

因此,如果我加入这些表,对于特定的BarGUID,那么如果我记录了1个Bar和4 bar事件,我会有4行,但我想要的只是最新的BarEventTime。所以我想加入并且只有一行:

我可以在EF中轻松地做到这一点:

var query = barEntities.BarEvents.Where( q=> q.BarGUID = '0000-0000-0000-0000')
    .Select(barEvent =>
    new LogItem()
    {
        Bar = barEvent.Bar,
        BarEventTime =     barEvent.BarLog.Max(u => u.BarEventTime)
    });

但是从我读过的内容来看,我应该能够定义一个LogItem实体,并将此逻辑以某种方式放在我的LogItem实体中,然后针对该实体编写查询。我的问题是,当我试图在实体定义中加入我的表时,我只看到琐碎的连接条件。有没有办法做到这一点?还是指南?

任何帮助都将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

为什么不执行以下操作:

  • 在数据库中创建一个SQL View,用于执行您想要的任务
  • 将视图添加到EF Context
  • 使用基于视图的新创建的实体