2011-01-12 4 views
1

Dies ist meine erste Frage zu Stackoverflow. Ich hoffe es ist nicht das letzte und hoffentlich werde ich mit einigen Antworten selbst beitragen.Ist es möglich, PersistenceSpecification und CheckList für den Unit-Test einer Inverse HasMany-Beziehung zu verwenden?

Meine Frage ist einfach. Ich stecke mit einem NUnit-Test fest, in dem ich eine inverse HasMany-Beziehung teste. Jedes Mal, wenn ich es debugge, ist die Ausgabe "Tatsächliche Anzahl ist nicht erwartet Anzahl ...". Ich habe umfangreiche Recherchen im Internet zu diesem Thema durchgeführt, und einige Leute behaupten, dass es unmöglich ist, solch einen Einzeltest zu machen.

Hier ist mein Beispiel. -Code für EmployeeMapping:

Id(x => x.ID).GeneratedBy.Identity(); 
HasMany(x => x.PositionHistory).KeyColumn("Employee_id").Inverse().Cascade.All(); 

Hier ist der Code für EmployeePositionMapping:

Id(x => x.ID).GeneratedBy.Identity(); 
References(x => x.EmployeeAtPosition).Cascade.All().Nullable(); 

Der Unit-Test ist wie folgt:

var position2 = new EmployeePosition(); 
      position2.ExtraBenefit = 353.00; 
      position2.Salary = 23300.00; 
      position2.Region = region; 
      position2.Department = department; 
      position2.Year = "2010"; 
      position2.Comment = "kommentar igen..."; 
      position2.History = true; 
var positionList = new List<EmployeePosition>(); 

    positionList.Add(position2); 

    new PersistenceSpecification<Employee>(Session, new CustomEqualityComparer<Employee, long>()) 
        .CheckProperty(p => p.ID, Int64.Parse("1")) 
        .CheckList(p => p.PositionHistory, positionList, (emp, empPosition) => emp.AddEmployeePosition(empPosition)) 
        .VerifyTheMappings(); 

Ich möchte die Nullable() ersetzen Attribut Not.Nullable() für References EmployeeAtPosition-Eigenschaft.

Ich habe eine Entity-Basisklasse, die kümmert sich um den Vergleich von Entitäten und sogar Transienten. Die AddEmployeePosition() kümmert sich darum, die Beziehung für Employee.PositionHistory und EmployeePosition.EmployeeAtPosition auf beide Arten zu verwalten.

Wenn ich auf die Nhibernate SQL in Ausgabe schaue Es scheint in Ordnung. Aber aus irgendeinem Grund ist es nicht gleich der Liste, die ich vorbereitet habe (positionList)

Weitere nützliche Fakten: Ich bin Nhibernate 3.0 und die passenden fließenden Nhibernate Binaries. Downloade sie vor drei Tagen. Verwenden von SQLite InMemory zum Ausführen von Mapping-Tests.

Ich schätze wirklich alle guten neuen Winkel, die Ihre Hinweise mir geben kann ...

/Mit freundlichen Grüßen BacceSR- von einem sehr verschneiten Stockholm.

Antwort

4

Hmm keine Antworten. Beantworte diese Frage besser selbst: D. Nun, ich fand die Antwort nach etwas googeln, und es gibt derzeit einige Probleme mit der CheckList-Methode. Ich habe stattdessen CheckComponent verwendet und es hat gut funktioniert. Jetzt wird das "Parent" -Objekt vor seinen "Children" eingefügt und daher kein Fehler mehr. CheckList hat versucht, das Gegenteil zu tun, was überhaupt nicht funktioniert hat ...

0

Ich habe dieses Problem auch diese Nacht und habe gerade zwei Stunden mit dieser sehr merkwürdigen Fehlermeldung verbracht. Ich habe viel Zeit in Anspruch genommen, um jede Zeile Code zu überprüfen, bevor ich google, um zu wissen, dass das nicht meine Schuld ist. Heheheh: D.

Nach diesem post können wir es einfach nicht mit inverse = true verwenden. Leider hat CheckComponentList bei mir nicht funktioniert, ich habe den gleichen Fehler bekommen.

Auch eine tote einfache explanation über inverse Stichwort gefunden, IMHO, ist wirklich ein schlechter Begriff.

+0

Wow .. ein Kommentar zu meiner alten Frage :-) Ich habe inzwischen verstanden, dass Sie PersistenceSpecification nicht so oft verwenden können, um Mappings zu verifizieren. Viele Beziehungen zwischen Entitäten sind umgekehrt, daher habe ich diesen Mapping-Test manuell durchgeführt. –