2013-03-16 9 views
33

Dies sind meine vereinfachten Domänenklassen.Entity Framework Mehrfachspalte als Primärschlüssel von 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;} 
} 

Dies ist meine Mapping-Klasse. Aber es funktioniert nicht.

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

Wie soll ich diese Klassen Karte, bereitzustellen, so dass ein Produkt in mehreren Kategorien zu sehen?

Antwort

76

Verwenden anonymes Typ-Objekt anstelle von 2-Anweisungen getrennt:

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

Von MSDN: EntityTypeConfiguration.HasKey Method

Wenn der Primärschlüssel aus mehreren Eigenschaften hergestellt wird dann einen anonymen Typen angeben, einschließlich der Eigenschaften. Zum Beispiel in C# t => new { t.Id1, t.Id2 } und in Visual Basic .Net Function(t) New From { t.Id1, t.Id2 }.

Verwandte Themen