2012-06-14 84 views
1

我試圖建立與關係一側的快捷方式的許多一對多的關係。使用某些代碼可以更容易地解釋:EF代碼第一多到許多與快捷

public class Product 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<Order> Orders { get; set; } 
} 

public class Order 
{ 
    public int Id { get; set; } 
    public string Customer { get; set; } 
    public virtual ICollection<OrderDetail> Details { get; set; } 
} 

public class OrderDetail 
{ 
    public int Id { get; set; } 
    public Order Order { get; set; } 
    public Product Product { get; set; } 
    public int Quantity { get; set; } 
} 

正如您所看到的,我希望在訂單方面有我的訂單詳細信息。但是,在產品方面,我只想要鏈接訂單。 EF在訂單表上添加Producty_Id FK時會生成錯誤的數據庫模式。

我試着給特定的模式沒有成功創建指令,如:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Product>().HasMany(x => x.Orders); 
} 

感謝您的幫助! Fabian

回答

1

我想在訂單方面有我的訂單詳細信息。但是,在 產品方面,我想只能有鏈接的訂單。 EF產生 錯誤的數據庫模式,因爲它增加了一個Producty_Id FK的訂單 表。

這對於EF來說是不可能的。您可以使其成爲未映射的屬性並手動實現屬性內的邏輯。但這將是一個漏洞的抽象。

正確的方法是將OrderDetail集合屬性映射到Product實體。

public class Product 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<OrderDetail> OrderDetails { get; set; } 
} 
+0

這是我現在該怎麼辦呢。請注意,產品端的屬性將是隻讀的。你需要 –

+0

@FabianVilers有用於映射屬性屬性公共getter和setter。如果你需要更好地控制你的模型,請嘗試NHibernate。 – Eranga

+0

THX,我會看看NHibernhate。 –