2011-07-10 84 views
0

我有客戶端調用進入WCF服務,然後通過Fluent NHibernate查詢數據庫。WCF和NHibernate事務處理範圍

由於它是默認值(即每次調用),所以WCF保留。

而且在我的代碼我做這樣的事情:

using (_repository.DbContext.BeginTransaction()) { 
    try { 
     _repository.SavePerson(object); 
     _repository1.SaveAddress(object1); 
    } catch { 
     _repository.DbContext.RollbackTransaction(); 
     throw; 
    } 
} 

因爲DbContext是兩個_repository_repository1相同。我需要在_repository1上做回滾嗎?

此外,由於存儲庫中的Save方法,因此Session對象用於保存對象。

我需要知道的是, 這個Session對於兩個調用都是一樣的,還是他們是兩個不同的?我假設他們自從 以來一樣,我將它們作爲一個工作單元在交易範圍內分組。

此外,這與WCF調用是否協調,我是否需要處理來自WCF端的事務?

+0

這是我的答案,應該有助於http://stackoverflow.com/a/15451070/168048 – szkra

回答

0

您的問題無法由無法訪問您的代碼的人回答。 NHibernate會話不是由WCF創建的,你有創建會話的一些自定義代碼。如果你想同時向r1和r2做一些事情並且僅回滾r1,那麼你需要在每個會話中使用事務進行會話。現在你可以在不碰r2的情況下回滾r1。

解決方法是從會話工廠打開第二個會話。