primary one many framework foreign c# entity-framework naming-conventions foreign-key-relationship navigation-properties

c# - many - one to one relationships entity framework



Entity Framework(Database-First) varias relaciones con el mismo convenio de nomenclatura de tablas de control (3)

De la entrada " Trabajar con propiedades de navegación inversa " del libro " Entorno de la entidad de programación: Primero el código ":

Puede agregar la configuración (usando Anotaciones de datos o la API de Fluent) para presentar esta información al creador de modelos. Con las anotaciones de datos, utilizará una anotación llamada InverseProperty . Con la API Fluent, utilizará una combinación de los métodos Has / With para especificar los extremos correctos de estas relaciones.

Puede colocar las anotaciones en cualquiera de los extremos de la relación (o en ambos extremos si lo desea). Los pegaremos en las propiedades de navegación en la clase de Alojamiento (Ejemplo 4-10). La Anotación de Datos de InverseProperty necesita el nombre de la propiedad de navegación correspondiente en la clase relacionada como su parámetro.

Ejemplo:

[InverseProperty("PrimaryContactFor")] public Person PrimaryContact { get; set; } [InverseProperty("SecondaryContactFor")] public Person SecondaryContact { get; set; }

Supongamos que tenemos esta situación:

Tablas en base de datos:

Country (id, country_name), Person (id, login), CountryManager (id_country, id_person), CountryStakeholder (id_country, id_person)

Si tuviéramos que crear el modelo a partir de la base de datos, utilizando Entity Framework Database-First, en VS tendríamos una clase como esta:

class Country { int id; string country_name; virtual ICollection<Person> Person1; // Navigation Properties virtual ICollection<Person> Person2; // ---------||---------- }

He simplificado mucho el código, pero espero que entiendas el punto.

Parece que cuando Entity Framework trata con claves externas, crea propiedades de navegación genéricas. ¿Existe la posibilidad de controlar cómo se crean las propiedades de navegación por nombre? Persona1, Persona2 no es muy explicativo, desafortunadamente.


En VS puedes hacer esto con la GUI.

Si muestra Model Browser, navegue hacia abajo en el árbol para:

YourEntityModel> Tipos de entidad> País

luego haga clic con el botón derecho en la propiedad de navegación "Person1" y seleccione "Propiedades", luego puede cambiar el nombre del nombre de la propiedad de navegación a lo que desee:

Solo cambia el nombre, guarda los cambios y listo ...

(En realidad, hay muchas formas de acceder a la ventana de propiedades de propiedades de navegación: también puede hacer clic derecho en el diagrama del modelo)


Recomiendo usar https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838

Permite más flexibilidad que cualquier cosa de generación de base de datos que haya visto. Todavía estoy trabajando para resolver mi propio problema, pero esto parece bastante prometedor. Pero, a diferencia de la generación de código predeterminado que proporciona EF, puede personalizar la asignación.

Al igual que en todos los ejemplos que he visto sobre el cambio de nombre de las propiedades de navegación, eso solo no será suficiente, ya que aún es necesario asignar EF para usar esas propiedades de navegación (aunque podría hackearlo y hacer que su Usuario2 apunte a ModifiedByUser, por ejemplo).