这可能是因为现在有点早,大脑没有正常运作,但我有一个关于实体框架和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