代码之家  ›  专栏  ›  技术社区  ›  Zazaeil

NHibernate,Get<TDto>(TId id)-是否应该开始事务?

  •  1
  • Zazaeil  · 技术社区  · 6 年前

    我是新来的。。。我应该吗 .BeginTransaction() tx.Commit()/.CommitAsync() IDisposable 可以吗?

     public override async Task<TDto> Get(int id)
        {
            using (var sessionBuilder = NHibernateConfiguration.Instance.BuildSessionFactory())
            using (var session = sessionBuilder.OpenSession())
            using (var tx = session.BeginTransaction())
            {
                return await session.GetAsync<TDto>(id);
            }
        }
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Amit Joshi    6 年前

    它是 推荐 呼叫 还包括 阅读 打电话。

    建议使用它的另一个原因是,现代RDBMS总是在事务中包装每个调用(如果尚未完成)。它很贵。如果程序员已经知道了工作单元,那么就更好了,这样可以节省成本,而且可以更好地对调用进行分组。

    顺便说一下,我希望你没有打电话来 BuildSessionFactory 每次通话。这是昂贵的,更重要的是,不需要。而是在应用程序启动时调用它。

    针对评论:

    more 而不是交易。对于像NHibernate这样的ORM,使用UoW可以更好地使用事务。还要注意的是,对于完整的ORM,实现UoW不需要做太多的工作。 ISession 本身就是UoW。你只需要正确地使用和管理它。


    https://stackoverflow.com/a/51781877/5779732
    https://stackoverflow.com/a/50721461/5779732