2013-03-16 29 views
33

Đây là các lớp miền được đơn giản hóa của tôi.Khuôn khổ thực thể Nhiều cột dưới dạng khóa chính bằng thông thạo 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;} 
} 

Đây là lớp bản đồ của tôi. Nhưng nó không hoạt động.

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

Làm thế nào tôi nên lập bản đồ các lớp này để cung cấp, do đó một sản phẩm có thể được nhìn thấy trong nhiều loại?

Trả lời

76

Sử dụng đối tượng loại vô danh thay vì 2 tách ra tuyên bố:

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

Từ MSDN: EntityTypeConfiguration.HasKey Method

Nếu khóa chính được tạo thành từ nhiều thuộc tính sau đó xác định một loại vô danh bao gồm cả tính chất. Ví dụ: trong C# t => new { t.Id1, t.Id2 } và trong Visual Basic .Net Function(t) New From { t.Id1, t.Id2 }.

Các vấn đề liên quan