Entity Framework(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);
Entity Frameworkは、次のクエリを生成します。
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プロパティの両方が必須としてマークされていることを考えると、両方の結合が内部結合であると予想されます。また、AddressプロパティとWorkPlaceプロパティをRequired属性でマークしようとしましたが、効果がありませんでした。
これはバグですか、それとも私は何かを誤って構成していますか?提案?