Zagłębiamy się dalej w świecie domyślnych konwencji EF Core. Automatyczna konfiguracja relacji jeden do jednego jest nowością we frameworku - EF 6.x nie obsługiwał takiego podejścia.
Utworzenie takiej relacji wymaga referencyjnej właściwości nawigacyjnej po obu stronach. Tym razem model bazowy (przed wprowadzeniem zmian) prezentuje się w poniższy sposób:
public class Company { public int CompanyId { get; set; } public string BrandName { get; set; } } public class Address { public int Id { get; set; } public string Address { get; set; } public string City { get; set; } }Założenie powyższego modelu jest proste. Dana firma ma główną siedzibę pod określonym adresem i żadna inna firma tutaj się nie znajduje. Wiem, podejście naiwne w dzisiejszych czasach - pamiętajcie jednak, że tematem przewodnim są relacje a nie poprawna architektura bazy danych. Realnym przykładem relacji jeden do jednego mógłby być paszport, który jest zawsze przypisany do konkretnej osoby.
Wprowadźmy zatem modyfikacje do wspominanych wcześniej klas:
public class Company { public int CompanyId { get; set; } public string BrandName { get; set; } // referencyjna właściwość nawigacyjna public CompanyAddress Address { get; set; } } public class CompanyAddress { public int Id { get; set; } public string Address { get; set; } public string City { get; set; } // klucz obcy public int CompanyId { get; set; } // odpowiadająca referencyjna właściwość nawigacyjna public Company Company { get; set; } }W powyższym przykładzie encja Company zawiera referencyjną właściwość nawigacyjną typu CompanyAddress a encja CompanyAddress zawiera klucz obcy CompanyId oraz odpowiadającą mu właściwość referencyjną Company. Taka konstrukcja encji spowoduje utworzenie relacji jeden do jednego:
EF Core utworzył również indeks unikalny na kolumnie klucza obcego CompanyId w tabeli Address. Indeks ten zapewnia, że wartość kolumny CompanyId będzie unikalna w orębie tabeli CompanyAddress co jest podstawowym wymaganiem w relacji jeden do jednego.
Podobnie jak w przypadku poprzedniego wpisu…jeżeli encje nie przestrzegają domyślnych konwencji możemy skorzystać z konfiguracji przy pomocy Fluent API.