z następującymi modelami jeden do jednego, zarówno o właściwościach nawigacji: -EF - WithOptional - Left Outer Join?
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; }
}
Foo ma opcjonalny Bar.
Bar ma wymagane Foo.
Mam następujące mapowania na Bar: -
HasRequired(x => x.Foo)
.WithOptional(x => x.Bar)
.Map(x => x.MapKey("FooId"));
który tworzy klucz obcy na Bar tabeli o nazwie 'FooId'.
Wszystko to działa dobrze, poza tym, że generuje SQL dla Foo z „Left Outer Join” do Bar na wszystkie zapytania, gdy jej nie potrzeba.
SELECT ..
[Extent2].[Id] AS [Id1]
FROM [dbo].[Foo] AS [Extent1]
LEFT OUTER JOIN [dbo].[Bar] AS [Extent2] ON [Extent1].[Id] = [Extent2].[FooId]
Przyjrzyj się bliżej, tylko zwraca identyfikator paska.
Searching stos Widzę większość propozycji użycia .WithMany
zamiast .WithOptional
, ale potrzebuję właściwości nawigacji.
Wszelkie sugestie?
Jeśli myślisz o tym, nie ma czegoś takiego jak 1: 1, chyba że robisz wspólny klucz podstawowy, ponieważ klucze muszą być unikatowe ze względu na swój charakter. Oczywiście, możesz ustawić unikalne ograniczenie na 1: *, aby stworzyć efektywny 1: 1, ale jest to rodzaj "wirtualnego" 1: 1, a nie rzeczywistego fizycznego.EF nie obsługuje takich ograniczeń, więc nie jest to możliwe. Właśnie dlatego dołączenie jest tam, ponieważ EF może założyć, że jest to 1: * –