2010-01-13 67 views
2

我遇到了一個很奇怪的問題,我想知道有沒有人見過。我將它作爲Save()方法的一部分存儲在存儲庫中,它將搜索並通過名稱查找每個關聯的標記。那裏有一條線,看起來像這樣。爲什麼這個NHibernate Linq查詢嘗試執行插入語句?

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語句。有任何想法嗎?

謝謝。

回答

2

我只是修復它,所以我想我會分享答案。有問題的查詢在另一個會話中。所以有這些行

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

創建一個會話和一個新的事務。之後,調用.Query()實際上是這樣做的。

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

所以它試圖在我現有的會話和事務中獲得另一個會話。我將查詢和更新移到了GetSession()和BeginTransaction()之上,並且一切正常。

相關問題