2012-06-18 9 views
12

Chciałbym wiedzieć, jakie zasady Entity Framework stosuje w odniesieniu do nazewnictwa/generowania właściwości nawigacji. Zaobserwowałem kilka scenariuszy, które wydają się nie mieć sensu, więc zastanawiałem się, czy ktoś wie dokładnie, jak one działają.Entity Framework Navigation Reguły generowania właściwości

Scenariusz 1:

public class Post 
{ 
    public int Id { get; set; } 
    public User Author { get; set; } 
} 

      Generuje

Scenario 1

tj. domyślnie właściwości nawigacyjnych generować FKS nazwie [PropertyName] _id

Scenariusz 2:

To ma sens, że jeśli EF generuje takie właściwości, o formacie [PropertyName] _id gdy ręcznie określić FK Id będzie podążać te same zasady, jednakże:

public class Post 
{ 
    public int Id { get; set; } 
    public int? Author_Id { get; set; } 
    public User Author { get; set; } 
} 

      Generuje

Scenario 2

Jak widać, nie rejestruje się automatycznie jako właściwość nav.

Scenariusz 3:

Jeśli to nie działa na scenariuszu 2, dlaczego to działa na alternatywnej konwencji nazewnictwa?

public class Post 
{ 
    public int Id { get; set; } 
    public int? AuthorId { get; set; } 
    public User Author { get; set; } 
} 

      Generuje

Scenario 3

Jakie są zasady wokół nawigacji wykrywania i generowania nieruchomości?

+0

Pomyślałem, że mogę połączyć z powrotem do dobrej [blogu] (http : //blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first) o właściwościach nawigacji. – orad

+0

@orad lol cool, tak naprawdę zadałem to pytanie w ramach badań dla tego posta :) –

Odpowiedz

12

To jest normalne zachowanie i opiera się na dwóch różnych konwencjach oparciu o EF

  • W pierwszym przykładzie używasz niezależne stowarzyszenie, gdzie jednostka nie posiada własności FK. EF utworzy FK w bazie danych za pomocą prostego wzoru: NameOfNavigationProperty_NameOfRelatedPK Ta konwencja jest zgodna z tradycyjnym nazewnictwem bazy danych.
  • W drugim przykładzie zdefiniowano właściwość o tej samej nazwie, co FK używane przez EF. EF wykryło to i dodało 1 do wygenerowanego FK. Powód, dla którego twoja własność nie jest używana jako FK, jest drugą konwencją, która wyszukuje właściwości FK. Ta konwencja oczekuje, że własność FK będzie miała tę nazwę (konwencje są zgodne z tradycją.NET nazewnictwa):
    • NameOfNavigationPropertyNameOfRelatedPK dostarczone przez NavigationPropertyNameForeignKeyDiscoveryConvention
    • NameOfRelatedTypeNameOfItsPK dostarczone przez TypeNameForeignKeyDiscoveryConvention
    • NameOfRelatedPK dostarczonych przez PrimaryKeyNameForeignKeyDiscoveryConvention
  • W ostatnim przykładzie poprawnie zdefiniowane własności FK i EF wykryto go więc używa klucz obcy stowarzyszenie.
+0

Niesamowite dzięki chory, spójrz na te konwencje –

Powiązane problemy