2010-01-13 2 views
2

아주 이상한 문제가 발생했습니다. 전에 본 적이 있는지 궁금합니다. 저장소에있는 Save() 메소드의 일부로 검색하고 이름으로 각 연관된 태그를 찾습니다. 거기에 라인이 있습니다.왜이 NHibernate Linq 쿼리가 insert 문을 실행하려고합니까?

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

는 즉시 그 라인이 실행으로이 예외 지금까지 내가 말할 또는 LINQ 쿼리가 삽입 문을 실행하지 않아야 여기에 무슨 일이 일어나고 있는지에 대해 이해할 수

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

가 발생합니다. 어떤 아이디어?

감사합니다.

답변

2

방금 ​​해결 했으므로 답을 공유 할 것입니다. 문제의 쿼리는 다른 세션 내에 있습니다. 따라서이 줄이 있습니다.

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

세션 및 새 트랜잭션 만들기. 그 후 .Query() 호출이 실제로 이것을 수행했다.

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

그래서 기존 세션 및 트랜잭션 내에서 다른 세션을 가져 오려고했습니다. GetSession() 및 BeginTransaction() 위의 쿼리 및 업데이트를 이동하고 모든 것이 제대로 작동했습니다.