【发布时间】:2011-02-17 09:16:54
【问题描述】:
我正在研究使用 NHibernate 实现 IRepository 模式,但我有一些问题,我无法在网上找到答案。
假设我有 3 个存储库,PersonRepository、PersonAddressRepository 和 PersonAccountRepository。现在假设业务逻辑规定存在调用 PersonRepository.Deactivate()、PersonAddressRepository.Deactivate() 和 PersonAccountRepository.Deactivate() 的“停用人员”流程。
我希望能够做一些事情......
using (ITransaction transaction = session.BeginTransaction()) {
session.Update(Person);
session.Update(PersonAddress);
session.Update(PersonAccount);
}
因此,如果其中任何更新失败,整个过程都会在数据库中回滚。现在我对 NHibernate 的理解是你只能为每个对象创建一个 Session 所以..
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 的事务的最佳实践是什么。
提前致谢。
【问题讨论】:
标签: c# nhibernate transactions irepository