2009-06-16 6 views
0

Ich habe Probleme beim Modellieren geerbter Klassen mit JoinedSubClassPart in Fluent NHibernate (Release 524). Ich habe andere Beiträge gesehen anzeigt, dass der Ansatz, den ich bin mit (siehe unten) sollte funktionieren, noch zur Laufzeit ich die folgende Ausnahme (von ImappingPart.PositionOnDocument Methode JoinedSubClassPart geworfen) erhalten:Problem mit JoinedSubClassPart in fließendem NHibernate

XunitException: FluentNHibernate.Cfg.FluentConfigurationException : Beim Erstellen einer SessionFactory wurde eine ungültige oder unvollständige Konfiguration verwendet. Überprüfen Sie die PotentialReasons-Auflistung und InnerException für weitere Details.

---- System.InvalidOperationException: Fehler beim Vergleich zweier Elemente im Array. -------- System.NotSupportedException: Obsolet

Sollte das tatsächlich funktionieren oder wurde dies zugunsten eines anderen Ansatzes veraltet?

Ich hoffe, dass ich einfach etwas falsch mache, da ich die Idee mag, das Unterklassen-Mapping über AddPart() dynamisch hinzufügen zu können.

Jede Hilfe wird sehr geschätzt!


Eine vereinfachte Version meiner Objektmodell (das immer noch nicht) ist wie folgt:

public class MyBaseClass 
{ 
    public int Id { get; set; } 
    public string CommonProperty { get; set; } 
} 

public class MySubClass1 : MyBaseClass 
{ 
    public string MySubClass1Property { get; set; } 
} 

public class MySubClass2 : MyBaseClass 
{ 
    public string MySubClass2Property { get; set; } 
} 

Und meine Zuordnungen sind wie folgt:

public class MyBaseClassMap : ClassMap<MyBaseClass> 
{ 
    public MyBaseClassMap() 
    { 
     Not.LazyLoad(); 
     Id(x => x.Id).GeneratedBy.Identity(); 

     Map(x => x.CommonProperty); 
     AddPart(new MySubClass1Map()); 
     AddPart(new MySubClass2Map()); 
    } 
} 

public class MySubClass1Map : JoinedSubClassPart<MySubClass1> 
{ 
    public MySubClass1Map() 
     : base("MyBaseClassId") 
    { 
     Not.LazyLoad(); 
     Map(x => x.MySubClass1Property); 
    } 
} 

public class MySubClass2Map : JoinedSubClassPart<MySubClass2> 
{ 
    public MySubClass2Map() 
     : base("MyBaseClassId") 
    { 
     Not.LazyLoad(); 
     Map(x => x.MySubClass2Property); 
    } 
} 

Antwort

1

Nach ein wenig tiefer graben, Ich fand this fluent-nhibernate Problem, das erklärt, dass ab r526 AddPart zugunsten von JoinedSubClass veraltet wurde. Nachdem ich meinen Code auf den unten gezeigten Code geändert hatte, konnte ich die von mir gesuchte Modellierung erhalten.

In meiner Basisklasse Karte, ersetzte ich die Anrufe addpart mit:

JoinedSubClass("MyBaseClassId", MySubClass1Map.AsJoinedSubClass()); 
JoinedSubClass("MyBaseClassId", MySubClass2Map.AsJoinedSubClass()); 

Und meine Unterklasse Karten geändert:

public class MySubClass1Map 
{ 
    public static Action<JoinedSubClassPart<MySubClass1>> AsJoinedSubClass() 
    { 
     return sub => 
     { 
      sub.Map(x => x.MySubClass1Property); 
     }; 
    } 
} 

public class MySubClass2Map 
{ 
    public static Action<JoinedSubClassPart<MySubClass2>> AsJoinedSubClass() 
    { 
     return sub => 
     { 
      sub.Map(x => x.MySubClass2Property); 
     }; 
    } 
} 
Verwandte Themen