为什么这个NHibernate Linq查询尝试执行insert语句?

时间:2010-01-13 04:38:16

标签: c# linq nhibernate

我遇到一个非常奇怪的问题,我想知道是否有人见过。我在存储库中作为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 个答案:

答案 0 :(得分:2)

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

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

创建会话和新事务。之后调用.Query()实际执行此操作。

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

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