ここでクラスマッピングに問題があります。私は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
ます。何か案は?