2011-04-18 62 views
1

這是一個示例場景。我有一個由以下表格組成的現有數據庫;EF代碼優先:使用中間表將實體映射到現有數據庫

訂單,與現場的OrderId(PK,INT)

產品,與場產品編號(PK,INT),PriceId(FK,INT)

訂單產品,帶字段OrderProductId(PK,int),OrderId(FK,INT),產品編號(FK,INT),OrderingStatus(INT)

價格與現場PriceId(PK,INT)

所有的PK身份。

我的實體是;

public class Order 
{ 
[Key] 
public int OrderId { get; set; } 
public virtual IList<Product> Products { get; set; } 
} 

public class Product 
{ 
[Key] 
public int ProductId { get; set; } 
public string Name { get; set; } 
public int OrderingStatus { get; set; } 

public virtual Price Price { get; set;} 

} 

public class Price 
{ 
[Key] 
public int PriceId { get; set;} 

} 

這裏是我的映射; 訂購;

HasMany<Product>(x => x.Products) 
    .WithMany() 
    .Map(m => 
    { 
     m.MapLeftKey("OrderId"); 
     m.MapRightKey("ProductId"); 
     m.ToTable("OrdersProducts", "dbo"); 
    }); 

產品;

Map(m => 
    { 
    m.Properties(p => new 
    { 
     p.Name 
    }); 
    m.ToTable("Products", "dbo"); 
    }); 

    Map(m => 
    { 
    m.Properties(p => new 
    { 
     p.OrderingStatus 
    }); 

    m.ToTable("OrdersProducts", "dbo"); 
    }); 

    HasRequired<Price>(x => x.Price) 
    .WithMany() 
    .Map(m => m.MapKey("PriceId")); 

Price;

ToTable("Prices", "dbo"); 

我不能得到這個權利我在上下文中的映射,是有任何人可以幫助我在正確的方向。

我實際上有兩種麻煩在這裏,首先是OrderingStatus到我的中間表的映射,第二我有麻煩連接我的表,即'指定的Schema無效。錯誤:...錯誤0019:我在一個類型中的每個屬性名稱必須是唯一的。屬性名稱'OrdersProductsId'已經定義。'


回答

2

您的映射將無法正常工作 - 因爲它不是在同一個表,它是不是由一個一對一關係到商品相關的,你不能OrderingStatus映射到你Prodcut它是獨立的。表一個一對多的關係,因爲你的結表包含您要使用額外的屬性時,必須公開OrdersProducts作爲獨立的實體:

public class Order 
{ 
    [Key] 
    public int OrderId { get; set; } 
    public virtual ICollection<ProductOrder> ProductOrders { get; set; } 
} 

public calss ProductOrder 
{ 
    [Key] 
    public int OrderProductId { get; set; } 
    public int OrderStatus { get; set; } 
    public virtual Product { get; set; } 
    public virtual Order { get; set; } 
} 

public class Product 
{ 
    [Key] 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public virtual Price Price { get; set;} 
} 

public class Price 
{ 
    [Key] 
    public int PriceId { get; set;} 
} 
+0

謝謝,我看清楚了現在,意識到什麼一直是我的問題,從開始。 – Per 2011-04-18 20:13:53

相關問題