代码之家  ›  专栏  ›  技术社区  ›  Nathan Palmer

为什么此nhibernate linq查询尝试执行insert语句?

  •  2
  • Nathan Palmer  · 技术社区  · 15 年前

    我遇到了一个非常奇怪的问题,我想知道是否有人以前见过。作为save()方法的一部分,它将在存储库中搜索并按名称查找每个关联的标记。里面有一条像这样的线。

    var tagRepo = (from t in tagRepository.Query() where t.Name == tag.Name select t).SingleOrDefault();
    

    一旦该行执行,它就会抛出这个异常

    GenericADOException: could not insert: [Core.Domain.Model.Tag][SQL: INSERT INTO [Tag] (Name) VALUES (?); select SCOPE_IDENTITY()]]
    

    据我所知或了解,在这里发生了什么,LINQ查询不应该执行INSERT语句。有什么想法吗?

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Nathan Palmer    15 年前

    我刚把它修好,所以我想我可以分享答案。有问题的查询在另一个会话中。所以有这些线

    using (var session = GetSession())
    using (var transaction = session.BeginTransaction())
    

    创建会话和新事务。在那之后,调用.query()实际上是这样做的。

    return GetSession().Linq<T>().AsQueryable();
    

    所以它试图在我现有的会话和事务中获得另一个会话。我将查询和更新移到getSession()和beginTransaction()之上,一切都正常工作。