2013-03-16 2 views
33

Это мои упрощенные классы домена.Entity Framework Несколько столбцов как первичный ключ от 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;} 
} 

Это мое отображение класса. Но это не работает.

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

Как следует сопоставить эти классы, чтобы обеспечить, таким образом, что один продукт можно увидеть в нескольких категориях?

ответ

76

Использовать анонимный тип объекта вместо 2 отделенный заявления:

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

Из MSDN: EntityTypeConfiguration.HasKey Method

Если первичный ключ состоит из нескольких свойств укажите анонимный тип в том числе и свойства. Например, в C# t => new { t.Id1, t.Id2 } и в Visual Basic .Net Function(t) New From { t.Id1, t.Id2 }.

Смежные вопросы