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

virtualen las propiedades de navegación es necesario para la carga diferida.virtualen propiedades escalares ayuda con el seguimiento de cambios de los objetos adjuntos..HasRequired(p => p.Category)peroProductno tiene una propiedad de la EntidadCatagorysino dos ids que hacen la clave compuesta de una categoría. ¿Puede explicarme, porque creo que ni siquiera se compilará ... Gracias!ProducttieneCategoryen 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
Navigationpropiedades. Sin embargo, ¿cómo puedo configurar solocascadeDelete: falsepara esta propiedad, no para todo el sitio? Gracias