2013-03-16 16 views
33

Queste sono le mie classi di dominio semplificate.Entity Framework Colonna multipla come chiave primaria di Fluent Api

public class ProductCategory 
{ 
    public int ProductId { get; set; } 
    public int CategoryId { get; set; } 

    public virtual Product Product { get; set; } 
    public virtual Category Category { get; set; } 
} 

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int? ParentCategoryId { get; set;} 
} 

Questa è la mia classe di mappatura. Ma non funziona.

public class ProductCategoryMap : EntityTypeConfiguration<ProductCategory> 
{ 
    public ProductCategoryMap() 
    { 
     ToTable("ProductCategory"); 
     HasKey(pc => pc.ProductId); 
     HasKey(pc => pc.CategoryId); 
    } 
} 

Come devo mappare queste classi per fornire, in modo che un prodotto può essere visto in più categorie?

risposta

76

Uso tipo di oggetto anonimo invece di 2 separate dichiarazioni:

HasKey(pc => new { pc.ProductId, pc.CategoryId}); 

Da MSDN: EntityTypeConfiguration.HasKey Method

Se la chiave primaria è costituita da più proprietà quindi specificare un tipo anonimo compresa la proprietà. Ad esempio, in C# t => new { t.Id1, t.Id2 } e in Visual Basic .Net Function(t) New From { t.Id1, t.Id2 }.

Problemi correlati