簡體   English   中英

如何在NHibernate上創建通用映射?

[英]How to create a generic mapping on NHibernate?

我在這里遇到類映射的麻煩。 我有四個表:

  • 固定
  • 請求
  • 控制
  • 信息

Request具有表FixMessage的外鍵,而Control具有Request的外鍵。 基本映射工作正常,但是我不想直接使用Message類型在RequestMessage之間映射外鍵,因為我們將不使用此類-我們將通過各種視圖進行所有插入和選擇,以實現此目的消息表。 要使用的視圖將取決於Fix表中存儲的值,例如, Message101Message的視圖(我們不使用所有字段,還有其他一些特定於業務的原因導致我們不希望使用該表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM