2013-05-29 12 views
5

Kann der schreibgeschützte Modus für Entitäten festgelegt werden, die mit dem Linq-Provider von NHibernate geladen werden?NHibernate Linq im schreibgeschützten Modus

Zum Beispiel können die folgenden mit Session.QueryOver erfolgen (und ich glaube, auch mit Kriterien):

Session.QueryOver(Of Foo)().ReadOnly() 

Gibt es eine equivilent für Session.Query zur Verfügung?

Antwort

7

Wie in der Dokumentation angegeben 10.1.2. Loading persistent entities as read-only:

Um das Standardverhalten zu ändern, so NHibernate Lasten Entitätsinstanzen von wandelbaren Klassen in die Sitzung und automatisch macht sie nur gelesen, rufen:

Session.DefaultReadOnly = true; 

Um die Standard zurück zu ändern, damit die von NHibernate geladenen Elemente nichtsind 10 aus read-only, rufen:

Session.DefaultReadOnly = false; 

Also, bevor Session.Query... Anruf Session.DefaultReadonly = true Aufruf, da diese Einstellung auf die ISession nicht an den Provider oben drauf geht.

+0

Danke dafür! Ich war mir dieser Einstellung auf Sitzungsebene nicht bewusst. Seltsam, wie sie einen "Read Only" -Operator für Criteria und QueryOver implementiert haben, aber nicht für den Linq-Provider. – DanP

+1

@DanP, das wäre eine nette und einfache Funktion zu implementieren. Sie können ein Problem unter https://nhibernate.jira.com öffnen. Quelle ist https://github.com/nhibernate/nhibernate-core. Dies würde wahrscheinlich eine Änderung in "LinqExtensionMethods" und "NhQueryable" beinhalten. –

+3

@DiegoMijelshon - Ich habe das folgende Problem geöffnet: https://nhibernate.jira.com/browse/NH-3470 – DanP

1

wenn Sie Sitzung lesen müssen, besserer Ansatz ist hier: how to create a readonly session in nHiberate?

Session.DefaultReadOnly = true; - in diesem Fall NHibernate alle Updates für Unternehmen akkumulieren (nennen wir alle Hörer usw.)

session.FlushMode = FlushMode.Never 

in diesem Fall NHibernate Ich werde keine Zuhörer anrufen, wie ich weiß

Verwandte Themen