2012-06-18 40 views
12

Me gustaría saber qué reglas sigue Entity Framework en cuanto a la denominación/generación de propiedades de navegación. He observado varios escenarios que no parecen tener sentido, así que me preguntaba si alguien sabe exactamente cómo funcionan.Entity Framework Navigation Reglas de generación de propiedades

Escenario 1:

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

      Genera

Scenario 1

es decir. por defecto propiedades de navegación generan FKs nombrados [PropertyName] _ID

Escenario 2:

Tiene sentido que si EF genera propiedades tales del formato [PropertyName] _ID cuando se especifica manualmente un Id FK que va a seguir sin embargo, las mismas reglas:

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

      Genera

Scenario 2

Como puede ver, esto no se registra automáticamente como propiedad de navegación.

Escenario 3:

Si no funciona para el Escenario 2 ¿Por qué funciona para una convención de nombre alternativo?

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

      Genera

Scenario 3

¿Cuáles son las reglas en torno a la detección y generación de propiedad de navegación?

+0

sólo pensé enlace a su buena [blog] (http : //blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first) sobre Propiedades de navegación. – orad

+0

@orad lol cool, de hecho, hice esta pregunta como parte de la investigación para esa publicación :) –

Respuesta

12

que se espera que el comportamiento y que se basa en dos convenciones diferentes en función de EF

  • En el primer ejemplo que está utilizando Asociación independiente donde su entidad no tiene la propiedad FK. EF creará FK en la base de datos usando un patrón simple: NameOfNavigationProperty_NameOfRelatedPK Esta convención sigue la denominación tradicional de bases de datos.
  • En el segundo ejemplo definió una propiedad con el mismo nombre que FK usado por EF. EF detectó esto y agregó 1 a su FK generado. La razón por la cual su propiedad no se usa como FK es la segunda convención que busca las propiedades de FK. Esta convención espera que la propiedad FK tenga este nombre (las convenciones siguen a las tradicionales.nombramiento NET):
    • NameOfNavigationPropertyNameOfRelatedPK proporcionada por NavigationPropertyNameForeignKeyDiscoveryConvention
    • NameOfRelatedTypeNameOfItsPK proporcionada por TypeNameForeignKeyDiscoveryConvention
    • NameOfRelatedPK proporcionada por PrimaryKeyNameForeignKeyDiscoveryConvention
  • En el último ejemplo, usted correctamente definida la propiedad FK y EF detectó por lo que utiliza Clave externa asociación.
+0

Gracias increíbles, eche un vistazo a esas convenciones –

Cuestiones relacionadas