2012-06-08 61 views
0

所以我有这个旧的系统的两个相关的表,订单和orderextras。订单表的Id为主键,客户名称为标量属性,orderextra_Id为外键。 orderextra只有两个属性,Id作为主键和一个名为extrainfo的varchar。将两个表结合到一个单一的实体类型

现在我刚刚开始阅读EF 4.0 Recipes,并且在刚开始的时候,它演示了将两个表合并成一个实体(基本上,我希望extrainfo出现在订单实体上,而不是orderextra作为一个实体)。但是,在这个例子中,两个表共享相同的PK。当他们有单独的PK并且其中一个表引用另一个表时可以这样做吗?

+0

如果你不需要写入这个组合实体,而你的后端是SQL,那么你可以在SQL中创建一个视图并将视图添加到你的实体中。 – JamieSee

+0

是的,如果我不需要回信的话,我会这么做。 – bobblez

回答

0

试试这个:

modelBuilder.Entity<Order>() 
    .Map(m => 
    { 
     m.Properties(t => new { /* order columns */ }); 
     m.ToTable("order"); 
    }) 
    .Map(m => 
    { 
     m.Properties(t => new { /* orderextra columns */ }); 
     m.ToTable("orderextra"); 
    }); 
+0

哦,我想我应该更具体。我正在寻找一种方法来完成设计师的工作。我甚至不知道你说的这个模型构建器是什么:)谢谢你的答案! – bobblez

+0

@bobblez'modelBuilder'是代码优先的流利api的一部分。所以如果你使用这个设计器,这不会对你有所帮助。 –

+0

@bobblez我不知道所有文件的名称,但根据我的经验,GUI只是抽象这个文件,大卫正在谈论修改。我并没有太多搞砸它,但不得不出于各种原因(出于某种原因,我的一个翻译函数在db修改后随机获得了第二个必需的参数)。我不会偏离它,你肯定会在某个时候触及它,而且它非常简单。 – evanmcdonnal

0

在设计上的实体之一,来自这两个表添加你想要的列并转到映射详细信息窗口。

从那里,你应该看到表 - >“映射到XXX表”。在这之下,您可以添加另一个表格和地图列,以便您拥有多个表格,并将其添加到您想要的属性中。

+0

是的,这是我尝试过的,但是当我尝试迭代context.Orders -collection时,我总是得到一个实体异常(其中根据我的尝试而改变)。这个问题似乎与Id字段有关。具体来说,映射到orderextra表的Id的内容。 EF似乎抱怨不得不映射所有关键属性,无论我试图映射到它。 – bobblez

相关问题