2012-06-18 12 views
12

Vorrei sapere quali sono le regole che Entity Framework segue per quanto riguarda la denominazione/generazione di proprietà di navigazione. Ho osservato diversi scenari che non sembrano avere senso quindi mi chiedevo se qualcuno sa esattamente come funzionano.Entity Framework Navigazione Regole di generazione di proprietà

Scenario 1:

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

      Genera

Scenario 1

esempio. Per impostazione predefinita, le proprietà di navigazione generano FKS nome [PropertyName] _ID

Scenario 2:

E 'logico che se EF genera proprietà quali del formato [PropertyName] _ID quando si specifica manualmente un FK Id seguirà le stesse regole però:

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

      genera

Scenario 2

Come si può vedere questo non si registra automaticamente come una proprietà di navigazione.

Scenario 3:

Se non funziona per lo scenario 2 Perché funziona per una convenzione di denominazione alternativa?

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

      Genera

Scenario 3

Quali sono le regole in tutto il rilevamento proprietà di navigazione e la generazione?

+0

Ho pensato di collegamento di nuovo al vostro buon [post] (http : //blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first) sulle proprietà di navigazione. – orad

+0

@orad lol cool, in realtà ho fatto questa domanda come parte della ricerca per quel post :) –

risposta

12

che ci si aspetta un comportamento e si basa su due convenzioni diverse in base da EF

  • Nel primo esempio si sta utilizzando un'associazione indipendente in cui il soggetto non ha proprietà FK. EF creerà FK nel database utilizzando un modello semplice: NameOfNavigationProperty_NameOfRelatedPK Questa convenzione segue la denominazione del database tradizionale.
  • Nel secondo esempio è stata definita la proprietà con lo stesso nome di FK utilizzata da EF. EF ha rilevato questo e ha aggiunto 1 al suo FK generato. Il motivo per cui la tua proprietà non viene utilizzata come FK è la seconda convenzione che cerca le proprietà FK. Questa convenzione si aspetta che la proprietà FK abbia questo nome (le convenzioni seguono la tradizione.NET denominazione):
    • NameOfNavigationPropertyNameOfRelatedPK fornito da NavigationPropertyNameForeignKeyDiscoveryConvention
    • NameOfRelatedTypeNameOfItsPK fornito da TypeNameForeignKeyDiscoveryConvention
    • NameOfRelatedPK fornito da PrimaryKeyNameForeignKeyDiscoveryConvention
  • Nell'ultimo esempio si correttamente definito proprietà FK e EF rilevato in modo che utilizza chiave esterna associazione.
+0

Impressionante grazie malato dare un'occhiata a quelle convenzioni –

Problemi correlati