我正在研究實現IRepository模式使用NHibernate和我有問題,我一直無法回答搜索網絡。C#共享事務和NHibernate使用IRepository
假設我有3個存儲庫,PersonRepository,PersonAddressRepository和PersonAccountRepository。現在假設業務邏輯規定存在調用PersonRepository.Deactivate(),PersonAddressRepository.Deactivate()和PersonAccountRepository.Deactivate()的「Deactivate Person」進程。
我希望能夠做的線沿線的東西..
using (ITransaction transaction = session.BeginTransaction()) {
session.Update(Person);
session.Update(PersonAddress);
session.Update(PersonAccount);
}
因此,如果其中任何更新失敗,整個過程滾動數據庫內回來。現在,此刻我的NHibernate的理解是,你只能創建每個對象,讓會話..
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Person).Assembly);
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
using (ISession session = sessionFactory.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Save(Person);
}
這是正確的還是我錯了?與NHibernate有關的多表更新和事務的事務最佳實踐是什麼?
在此先感謝。
嗨,謝謝你的回答,我的後續問題是,這個TransactionService是否有效地管理着一個事務池,這樣如果一個事務失敗了,那麼池中的所有事務都會回滾?或者是否有跨多個存儲庫共享1個事務的方式? – David 2011-02-17 09:35:34
每個線程都有一個事務。當然,其他並行事務在其他線程上進行。 – 2011-02-17 11:28:35