Estoy usando Entity framework 4.1 en la aplicación MVC 3. Tengo una entidad donde tengo la clave principal que consta de dos columnas (clave compuesta). Y esto se está utilizando en otra entidad como clave externa. ¿Cómo crear la relación? En scnerios normales usamos:
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 CategoryId { get; set; }
public virtual Category Category { get; set; }
}
pero ¿qué pasa si la categoría tiene dos columnas clave?
c#
entity-framework
ef-code-first
foreign-keys
composite-key
DotnetGorrión
fuente
fuente
virtual
en las propiedades de navegación es necesario para la carga diferida.virtual
en propiedades escalares ayuda con el seguimiento de cambios de los objetos adjuntos..HasRequired(p => p.Category)
peroProduct
no tiene una propiedad de la EntidadCatagory
sino dos ids que hacen la clave compuesta de una categoría. ¿Puede explicarme, porque creo que ni siquiera se compilará ... Gracias!Product
tieneCategory
en mi respuesta.Creo que la forma más fácil es usar la Anotación de datos en la propiedad de navegación de esta manera:
[ForeignKey("CategoryId1, CategoryId2")]
public class Category { [Key, Column(Order = 0)] public int CategoryId1 { get; set; } [Key, Column(Order = 1)] public int CategoryId2 { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { [Key] public int ProductId { get; set; } public string Name { get; set; } public int CategoryId1 { get; set; } public int CategoryId2 { get; set; } [ForeignKey("CategoryId1, CategoryId2")] public virtual Category Category { get; set; } }
fuente
Navigation
propiedades. Sin embargo, ¿cómo puedo configurar solocascadeDelete: false
para esta propiedad, no para todo el sitio? Gracias