2012-03-05 40 views
0

Iam正在使用Web服務進行應用程序。作爲ORM,我使用nHibernate。nHibernate saveorupdate /合併分離對象

問題:

在應用層予加載與儲存庫實體可以說,ID(PK)32,將其轉換爲視圖模型並將其發送到表示層。會話刷新。

然後,用戶可以更改該實體中的數據,並向編輯數據的應用層發送請求。這是我的問題。隨着請求(對於applicatino層)和所有數據作爲視圖模型(不是enity對象),iam也發送一個ID,但iam不能創建帶ID的業務對象(id由nhibernate,private set生成)。我應該使用反射並注入該id,然後使用nhibernate saveorupdate或合併方法或手動比較並設置新值?

謝謝。

回答

2

而不是試圖用id創建業務對象,您應該從會話中加載對象開始。在從nhibernate加載業務對象後,根據編輯模型修改值,然後更新對象。

您不必手動比較字段以查看它們是否已更改,nhibernate將爲您處理該字段,並僅使用已更改的字段更新數據庫。

你的方法可能是這樣的:

public ActionResult Update(EditModel model) 
{ 
    var entity = _session.Get<Entity>(model.Id); 
    entity.Name = model.Name; 
    entity.Description = model.Description; 
    entity.SomeField = model.SomeField; 
    _session.SaveOrUpdate(entity); 
} 
+0

您選擇的權利。我完全忘記了事務提交後對象被持久化了。謝謝 – Ivan 2012-03-05 14:28:26