2009-06-16 5 views
0

Fluent NHibernate(リリース524)のJoinedSubClassPartを使用して、継承したクラスのモデリングに問題があるようです。私が使用しているアプローチは、(下記参照)動作する必要があることを示す他の記事を見てきました、まだ実行時に私は(JoinedSubClassPartのImappingPart.PositionOnDocumentメソッドによってスローされた)次の例外を取得:Fluent NHibernateのJoinedSubClassPartに関する問題

XunitException:FluentNHibernate.Cfg.FluentConfigurationExceptionを:SessionFactoryの作成中に無効または不完全な設定が使用されました。 PotentialReasonsコレクションをチェックし、詳細についてはInnerExceptionをチェックしてください。

---- System.InvalidOperationException:配列の2つの要素の比較に失敗しました。 -------- System.NotSupportedException:廃止されました

これは実際には機能するのでしょうか、これは別のアプローチを支持して廃止されましたか?

私は、AddPart()を使ってサブクラスのマッピングを動的に追加できるという考え方のように、私は単に間違ったことをやりたいのです。

ご協力いただきますようお願い申し上げます。

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; } 
} 

そして、次のように私のマッピングは、次のとおりです:次のように


私のオブジェクトモデル(まだ失敗)の簡易版である

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); 
    } 
} 

答えて

1

少し深く掘った後、私はthisの流暢なnhibernateの問題を発見しました。r526のAddPartはJoinedSubClassのために廃止されました。私のコードを以下に示すように変更した後、私が探していたモデリングを手に入れることができました。私の基本クラスマップでは

は、私はAddPartへの呼び出しを置き換える:

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

そして、私のサブクラスマップに変更:

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); 
     }; 
    } 
} 
関連する問題