[英]How to create a generic mapping on NHibernate?
我在這里遇到類映射的麻煩。 我有四個表:
Request
具有表Fix
和Message
的外鍵,而Control
具有Request
的外鍵。 基本映射工作正常,但是我不想直接使用Message
類型在Request
和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
錯誤。 有任何想法嗎?
畢竟,我不得不將區分符字段的引用放在Request
,這使我能夠使用NHibernate的Any
映射。 在我看來,我在問題編輯中描述的問題與問題本身無關,因此, Daniel Schilling提出的解決方案解決了我的問題。 關於Any
映射,可以在此處找到其工作方式的描述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.