トリッキーな問題 - 私にご負担ください。どんな助けでも大歓迎です。マルチプル "ロール"を使用したサブクラスマッピング
私はテーブル/クラスの連絡先(PK Id)と2つの派生したクライアントと債務者(PKとFK ContactId)を持っています。第4テーブルのCaseには、DebtorとClientへの外部キー(以下のマッピング)があります。
最初はすべて正常に機能しました。しかし、その後私は同じContactがあるケースではクライアント、別のケースではDebtorであるデータをヒットしました。これらはSession.Query<Case>().Fetch(c => c.Debtor).Fetch(c => c.Client)
のようなものNHibernateのクエリで読まれている場合
NHibernate.WrongClassException
"Object with id: {someGuid...} was not of the specified subclass: Client
(loading object was of wrong class [Debtor])
があり、セッション最初のレベルのキャッシュは、それがIDとSQLの結果セットからのデータの読み出しを回避しようとすることで、レコードを認識しているように思えます。もちろん、キャストNHは再利用に失敗すると考える。
残念ながら、DBスキーマを変更することはできません。それはレガシーシステムです。 (スキーマは正常であり、IMOはクリーンです)
重要かどうかわかりません:クラスContactは抽象ではありません。クライアントでもなく債務者でもない連絡先が使用されています。
これらの複数の役割を持つ連絡先でこれを動作させる可能性はありますか?前もって感謝します。
public partial class ContactMap : ClassMap<Contact>
{
public ContactMap()
{
Id(x=>x.Id).GeneratedBy.Guid();
Map(x=>x.FirstName);
Map(x=>x.Name1).Not.Nullable();
...
}
}
public class DebtorMap : SubclassMap<Debtor>
{
public DebtorMap()
{
KeyColumn("ContactID");
Table("[dbo].[Debtor]");
Map(x => x.MaritalStatus);
...
}
}
public partial class ClientMap : SubclassMap<Client>
{
public ClientMap()
{
KeyColumn("ContactID");
Map(x => x.ClientNo).Not.Nullable();
...
}
}
public partial class CaseMap : ClassMap<Case>
public CaseMap()
{
...
References<Client>(x=>x.Client)
References<Debtor>(x=>x.Debtor)
...
}
:役割は、次のようになり見ます時間。 – Firo
私はあなたがスキーマを変更することはできないが、スキーマにビューを追加することはできますか? – eulerfx