2011-02-14 44 views
0

我有一個名爲Worker的實體和另一個名爲Company的實體。在工人的NHibernate的映射..我說與NHibernate的asp.net mvc - 如何在保存/創建實體時處理多對一

<many-to-one name="Company" column="CompanyID"/> 

中的類

public class Company 
{ 
    public virtual int Id {get; set;} 
    public virtual string Name { get; set;} 
} 
public class Worker 
{ 
    public virtual int Id {get; set;} 
    public virtual Company Company { get; set;} 
    public virtual CompanyID { get { return Company == null ? 0 : Company.Id;}} 
} 

在我創建工人觀點我有,有一個CompanyID輸入HTML表單。如何在用戶使用HTML POST提交表單後,在我的控制器中正確處理worker的創建/更新? CompanyID字段是隻讀的。在這種情況下如何使TryValidate TryUpdateModel?

回答

0

當您使用ORM時,不應使用該ID。執行類似session.Get<Company>(id)的操作來檢索正確的公司實體,並將其分配給您的Worker實體的屬性Company。 我甚至會從你的班級中刪除CompanyID屬性。

+2

在這種情況下使用級聯是一個非常糟糕的主意。您不希望在存儲工人時隱式地創建新公司。公司需要在那裏。 – 2011-02-14 10:33:04

2

我不知道ASP.NET和整個東西,但我可以告訴你如何實現它對NHibernate。

您需要將包括CompanyID在內的工作人員的屬性傳遞給服務器。我建議使用DTO而不是傳遞實體。

如果您需要更多詳細信息,您應該解釋如何將這些數據傳輸到服務器。

//create a company-proxy. this doesn't touch the database 
Company company = session.Load<Company>(companyId); 
// assign it the the worker. You need to put the worker into the 
// session somehow before. this depends on your specific server interface 
worker.Company = company; 
相關問題