可能是因为早上有点早,大脑运转不正常,但我对实体框架和SQL有疑问
假设我有2张桌子
消费 ConsumerID 名称 MembershipNumberID
MembershipEntry MembershipEntryID EntryDate MembershipNumberID
成员在拥有consumerID之前可以拥有MembershipNumberID。根据一个人的想法收集会员编号并在将其与consumerID关联之前第一次使用该编号。
我有些想加入这些表,所以我可以创建一个返回所有成员条目的查询,即使它们还没有与它们相关的消费者。
我试图将一个FK添加到MembershipEntry表中,但是它会失败,因为你预期会员表中会丢失id。
我是否只创建一个名为MembershipEntries的第3个表并拥有2个FK字段?
我可以使用类似
之类的东西创建基本联接from item in ctx.MembershipEntry
join c in ctx.Consumer on item.MembershipNumberID equals c.MembershipNumberID
select new MembershipViewModel()
{
.....................
}
如果使用EF4包含所有参赛作品,即使他们没有会员编号但仍与他们联系,我如何终止左外联接呢?
答案 0 :(得分:2)
在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()
{
...
}
我希望它也适用于EF。
答案 1 :(得分:1)
您不需要第三个表将这两个数据表连接在一起(这就是为什么它是关系数据库!! WOOHOO!)。重点是使关联和提取数据变得“容易”。您只需要一个简单的SQL语句!
如:
SELECT *
FROM MembershipEntry
LEFT OUTER JOIN Consumer on Consumer.MembershipNumberID = MembershipEntry.MembershipNumberID
LEFT OUTER JOIN说“即使在Consumer表中没有任何内容可以匹配,也可以从MembershipEntry表中提供所有内容”
有关详细信息和示例,请参阅http://www.w3schools.com/sql/sql_join_left.asp!
注意:某些数据库可能只使用LEFT JOIN但SQL使用LEFT OUTER JOIN