2013-03-16 7 views
33

Oto moje uproszczone klasy domen.Moduł Entity Framework Multiple Column jako klucz podstawowy przez 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;} 
} 

To moja klasa mapowanie. Ale to nie działa.

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

Jak mam mapę, aby te zajęcia dają tak, że jeden produkt może być postrzegane w wielu kategoriach?

Odpowiedz

76

Zastosowanie anonimowy typ obiektu zamiast 2 oddzielone oświadczenia:

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

Od MSDN: EntityTypeConfiguration.HasKey Method

Jeśli klucz podstawowy składa się z wielu właściwości następnie określ typ anonimowy łącznie z prefiksem nieruchomości. Na przykład w języku C# t => new { t.Id1, t.Id2 } i Visual Basic .Net Function(t) New From { t.Id1, t.Id2 }.