2 Stimmen

Warum versucht diese NHibernate-Linq-Abfrage, eine Einfügeanweisung auszuführen?

Ich stoße auf ein sehr seltsames Problem, ich frage mich, ob jemand vor gesehen hat. Ich habe als Teil meiner Save()-Methode in einem Repository, dass es suchen und finden Sie alle zugehörigen Tag durch seinen Namen. Es gibt eine Zeile darin, die wie folgt aussieht.

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

Sobald diese Zeile ausgeführt wird, kommt es zu folgenden Ausnahmen

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

Soweit ich sagen oder verstehen kann, was hier geschieht, sollte die Linq-Abfrage nicht eine Einfügeanweisung ausführen. Irgendwelche Ideen?

Gracias.

2voto

Nathan Palmer Punkte 1885

Ich habe das Problem gerade behoben und dachte, ich würde die Antwort mit Ihnen teilen. Die betreffende Abfrage befand sich innerhalb einer anderen Sitzung. Es gab also diese Zeilen

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

Erstellen einer Sitzung und einer neuen Transaktion. Danach wurde der Aufruf von .Query() tatsächlich ausgeführt.

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

Es wurde also versucht, eine weitere Sitzung innerhalb meiner bestehenden Sitzung und Transaktion zu erhalten. Ich habe die Abfrage und die Aktualisierungen über die GetSession() und BeginTransaction() verschoben und alles hat funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X