Entity Framework (4.2) HasRequired приводит к неожиданному LEFT OUTER JOIN

Похоже, что Entity Framework (последняя версия от NuGet) может игнорировать конфигурацию HasRequired при построении объединений для Navigation Properties, отличных от первого определенного.

Например, учитывая объект 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, но это не дало никакого эффекта.

Это ошибка или я что-то неправильно настроил? Suggestions?

9
задан mindlessgoods 16 December 2011 в 19:05
поделиться