ここでクラスマッピングに問題があります。私は4つのテーブルを持っています:
- 修理
- リクエスト
- コントロール
- メッセージ
RequestにはテーブルFixおよびへの外部キーがありMessage、 にControlは への外部キーがありRequestます。基本的なマッピングは問題なく動作しますが、このクラスを使用しないため、このメッセージ テーブルにアクセスするさまざまなビューを介してすべての挿入と選択を行うため、外部キーを のタイプRequestとMessage直接マッピングしたくありません。Message使用されるビューは、テーブルに保存されている値に依存しFixます。たとえば、Message101ビューオーバーMessageです (すべてのフィールドを使用するわけではなく、テーブルを使用したくないビジネス固有の理由が他にもありますMessage)。
指定されたシナリオでは、基本的な考え方は、次のようなマッピングを持つことです。
public class Request: Entity
{
public virtual short Number { get; set; }
public virtual Fix Fix { get; set; }
public virtual IMessage Message { get; set; }
}
すべてのクラスによって実装されるIMessageインターフェースです。クラスでMessageジェネリックを使用しようとしましたが、役に立ちませんでした。Request多分使用MappingOverrideすることができますか?
ありがとう
編集:
Any使用するために、オブジェクト タイプを検索するために使用する値をRequestテーブルに置いたので、オーバーライドは次のようになります。
public override void OverrideMapping(IClassMapper<Request> __m)
{
__m.Any(x => x.Envio, typeof(long), m =>
{
m.IdType<long>();
m.MetaType<short>();
m.MetaValue(101, typeof(Message101));
m.Columns(id =>
{
id.Name("MessageId");
id.NotNullable(true);
}, classRef =>
{
classRef.Name("MessageType");
classRef.NotNullable(true);
});
m.Access(Accessor.Property);
m.Cascade(Cascade.None);
}
);
}
しかし、私はエラーを受け取り続けnot-null property references a null or transient valueます。何か案は?