似乎实体框架(来自 NuGet 的最新版本)在为导航属性构造连接而不是定义的第一个连接时可能会忽略 HasRequired 配置。
例如,给定一个具有以下配置的 POCO 对象(Person):
var person = modelBuilder.Entity<Person>();
person.ToTable("The_Peoples");
person.HasKey(i => i.Id);
person.Property(i => i.Id).HasColumnName("the_people_id");
person.HasRequired(i => i.Address)
.WithMany()
.Map(map => map.MapKey("address_id"));
person.HasRequired(i => i.WorkPlace)
.WithMany()
.Map(map => map.MapKey("work_place_id"));
我正在尝试使用以下查询加载人员列表:
myContext.Set<People>()
.Include(o => o.Address)
.Include(o => o.WorkPlace);
实体框架生成以下查询:
FROM [dbo].[The_Peoples] AS [Extent1]
INNER JOIN [dbo].[The_Addresses] AS [Extent2] ON [Extent1].[address_id] = [Extent2].[address_id]
LEFT OUTER JOIN [dbo].[The_Work_Places] AS [Extent3] ON [Extent1].[work_place_id] = [Extent3].[work_place_id]
请注意,*The_Addresses* 表的连接是内连接(如预期的那样),但是,*The_Work_Places* 的后续连接是外连接。鉴于 Address 和 WorkPlace 属性都被标记为必需,我希望这两个连接都是内部连接。我还尝试使用 Required 属性标记 Address 和 WorkPlace 属性,但这没有效果。
这是一个错误还是我可能配置错误?建议?