用下面的一对一个模特,都与导航性能: -EF - WithOptional - 左外连接?
public class Foo
{
public int Id { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public virtual Foo Foo { get; set; }
}
富有一个可选的酒吧。
酒吧有需要富。
我有以下映射上酒吧: -
HasRequired(x => x.Foo)
.WithOptional(x => x.Bar)
.Map(x => x.MapKey("FooId"));
它创建的名为酒吧表的外键 'FooId'。
所有这一切工作正常,但其与“左外部联接”到酒吧上所有查询生成富的sql其不需要的时候。
SELECT ..
[Extent2].[Id] AS [Id1]
FROM [dbo].[Foo] AS [Extent1]
LEFT OUTER JOIN [dbo].[Bar] AS [Extent2] ON [Extent1].[Id] = [Extent2].[FooId]
仔细看它只会返回酒吧的ID。
Searching stack我可以看到大多数建议使用.WithMany
而不是.WithOptional
,但我需要导航属性。
有什么建议吗?
如果你考虑一下,除非你正在做一个共享主键,否则真的没有1:1这样的东西,因为键的性质必须是唯一的。当然,你可以对1:*设置一个唯一的约束来创建一个有效的1:1,但这是一种“虚拟”1:1,而不是一个真实的物理约束。EF不支持这样的约束,所以这是不可能的。这就是加入的原因,因为EF只能假设这是1:* –