使用EF连接3个表的正确方法是什么?



这可能是因为现在有点早,大脑没有正常运作,但我有一个关于实体框架和SQL的问题

假设我有两个表

消费者ConsumerID名字MembershipNumberID

MembershipEntryMembershipEntryIDEntryDateMembershipNumberID

成员可以在拥有consumerID之前拥有MembershipNumberID。想象一下,一个人收集了一个会员号码,并在第一次使用这个号码时,将它与consumerID关联起来。

我想连接这些表,这样我就可以创建一个查询,返回所有的成员条目,即使它们还没有关联的消费者。

我已经尝试向MembershipEntry表添加FK,但是由于成员表中缺少id,它会失败。

我只是创建一个名为MembershipEntries的第三个表,并有2个FK字段吗?

我可以使用

创建一个基本连接
from item in ctx.MembershipEntry
     join c in ctx.Consumer on item.MembershipNumberID  equals c.MembershipNumberID
     select new MembershipViewModel()
     {
     .....................
     }

我如何使用EF4创建一个左外连接来包括所有条目,即使它们没有一个成员编号尚未与它们相关联?

在LINQ to SQL中应该是这样的

from item in ctx.MembershipEntry
join c in ctx.Consumer on 
    item.MembershipNumberID equals c.MembershipNumberID into customers
from c in customers.DefaultIfEmtpy()
select new MembershipViewModel()
{
    ...
}

您不需要第三个表来将这两个数据表连接在一起(这就是为什么它是关系数据库!!)哦吼!)整个要点是使关联和提取数据变得"容易"。您所需要的只是一条简单的SQL语句!

例如:

SELECT * 
FROM MembershipEntry 
LEFT OUTER JOIN Consumer on Consumer.MembershipNumberID = MembershipEntry.MembershipNumberID

LEFT OUTER JOIN表示"给我MembershipEntry表中的所有内容,即使在Consumer表中没有与之匹配的内容"

参见http://www.w3schools.com/sql/sql_join_left.asp了解更多细节和示例!

注意:有些数据库可能只使用LEFT JOIN,但SQL使用LEFT OUTER JOIN

相关内容

  • 没有找到相关文章

最新更新