2011-01-06 14 views
3

Ich habe eine Viele-zu-Viele-Beziehung zwischen zwei Entitäten. Im Rahmen eines Batch-Prozesses erstelle ich eine große Anzahl dieser Entitäten und verknüpfe sie miteinander. Dies ist ein IStatelessSession.NHibernate IStatelessSession und Viele-zu-Viele-Beziehungen

Ich verwende NHibernate 3.0.

Instanzen:

class Entity1 
{ 
    ICollection<Entity2> Entities { get; set; } 
} 

class Entity2 
{ 
    ICollection<Entity1> Entities { get; set; } 
} 

Grundsätzlich ist der Batch-Code sieht ungefähr so ​​aus:

var entity1 = new Entity1(); 
var entity2 = new Entity2(); 

entity1.Entities.Add(entity2); 
entity2.Entities.Add(entity1); 

Session.Insert(entity1); // IStatelessSession.Insert 
Session.Insert(entity2); 

Die beiden Entitäten korrekt beibehalten werden, aber die Beziehung Tisch zwischen ihnen nicht mit der Beziehung zwischen den beiden aktualisiert Entitäten.

Ich verstehe, dass dies mit der Tatsache zu tun hat, dass zustandslose Sitzungen die Objekte nicht verfolgen. Aber wie würde ich eine Viele-zu-Viele-Persistenz erreichen?

+0

Ich bin nicht sicher, dass es mit den statusfreien Sitzungen zu tun hat. Können Sie Ihre Mapping-Datei posten? – mcabral

Antwort

1

Sammlungen werden von zustandslosen Sitzungen ignoriert. Sie sollten reguläre ISession verwenden und ISession.Clear in einem vernünftigen Intervall aufrufen (sagen wir alle 500 Objekte). Auf diese Weise wird der Cache der ersten Ebene nicht aufgebläht und Sie haben eine anständige Leistung.