.net data-annotations ef-code-first entity-framework-4.1

.net - Claves foráneas en el marco de la entidad 4.1



data-annotations ef-code-first (2)

Estoy trabajando en Entity Framework 4.1 y utilizando anotaciones de datos para claves externas. Quiero saber cómo podemos definir una o muchas relaciones entre el producto y las categorías. Quiero mapear categoría. categoryId con product.cid

public class Category { public string CategoryId { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { public int ProductId { get; set; } public string Name { get; set; } public string CId { get; set; } public virtual Category Category { get; set; } }

Por favor recomiende


Ambos enfoques deberían funcionar:

public class Product { public int ProductId { get; set; } public string Name { get; set; } [ForeignKey("Category")] public string CId { get; set; } public virtual Category Category { get; set; } }

O:

public class Product { public int ProductId { get; set; } public string Name { get; set; } public string CId { get; set; } [ForeignKey("CId")] public virtual Category Category { get; set; } }

ForeignKeyAttribute se utiliza para emparejar propiedad de navegación y propiedad de clave externa. Contiene el nombre de la propiedad de navegación relacionada o el nombre de la propiedad de clave externa relacionada.


Usas las configuraciones de la entidad para esto.

En la configuración de la entidad, agregue esta asignación a la configuración de la categoría de la entidad:

HasMany<Product>(x => x.Products).WithRequired().HasForeignKey(x => x.CId);

Solo necesita asignarlo a una de sus clases y DbContext es lo suficientemente inteligente como para usarlo.

Ver esta publicación del blog para más información.

EDITAR Para hacer esto usando anotaciones de datos, creo que el enfoque correcto es el siguiente:

[RelatedTo(RelatedProperty="Products", Key="CId", RelatedKey="CategoryId")] public virtual Category Category { get; set; }