我正在EF 4.1的第一步。因爲我使用的是NHibenate,所以在我看來,代碼優先的方法是最好的。我對於一對多(或多對一)真實性的良好映射存在問題。假設我有兩個實體:實體框架一對多關係代碼
class ClientModel
{
int ClientID;
string Name;
virtual IList<OrderModel> Orders;
}
class OrderModel
{
int OrderID;
string Details;
virtual ClienModel Client;
}
當我這樣離開時,生成數據庫時出現錯誤 - 表中的鍵缺失。我想通過將密鑰的名稱更改爲ID(但它不符合我的命名約定)或通過添加[Key]註釋來修復它。即使我添加了這個註解,表名仍然是錯誤的 - 就像類的名字,但是用's'。 所以我試圖使用流利的API - 我做了映射。但是,如果我設置的映射就像這樣:
class ClientMapping
{
ClientMapping()
{
this.HasKey(e => e.ClientID).Property(e => e.ID).HasColumnName("ClientID");
this.Property(e => e.Name).HasColumnName("Name");
this.HasMany(e => e.Orders).WithOptional().Map(p => p.MapKey("OrderID")).WillCascadeOnDelete();
this.ToTable("Clients");
}
}
class OrderMapping
{
OrderMapping()
{
this.HasKey(e => e.OrderID).Property(e => e.OrderID).HasColumnName("OrderID");
this.Property(e => e.Details).HasColumnName("Details");
this.HasRequired(e => e.Client).WithMany().Map(p=>p.MapKey("Client")).WillCascadeOnDelete(false);
this.ToTable("Orders");
}
}
數據庫中表之間的關係增加了一倍。 使用代碼優先方法進行一對多關係的正確方法是什麼?我是朝着一個好的方向思考還是錯誤的方法?
編輯
OK,我已經在路上@Eranga表現做了,但仍是一個問題。當我從數據庫獲取客戶端時,其Orders屬性爲空(但在數據庫中它有一些Order.ClientID == Client.ClientID的訂單)。
我測試了我的答案給出的配置和正常工作。確保'訂單'是一個財產,而不是一個領域。 – Eranga
嘗試'虛擬列表訂單;'而不是'虛擬IList 訂單;' –