HasOne vs References Mapping Fluent NHibernate

不羁岁月 提交于 2020-01-01 02:53:06

问题


This is the first time I am working with FluentNhibernate Mapping and facing a question of how to reference another table. Any help is appreciated:

I have several tables named CD_varname and all these contain two columns - CODE and DESCR.

I have one main table called Recipient and it has, say two columns, called ALIVE and SEX, both are of type number, and they reference to the tables CD_ALIVE and CD_SEX. If Alive=1 in the Recipient, then we need to get the code and descr from CD_ALIVE table where Code=1.

I have described a Codef class:

public Class Codef
{
    int Code { get; set; }
    string Descr { get; set; }
}

My Recipient Class assigns these to a component. Recipient class looks like this:

 public Class IRecepient
{
    int ID { get; set; }
    Birth Birth {get; set;}
    Death Death { get; set; }
}

Where my Birth and Death classes are:

public Class Birth
{
    DateTime BDate { get; set; }
    Codef Sex { get; set; }
    Codef Ethnicity { get; set; } //CD_ETHNICITy Table
    Codef Race { get; set; } //CD_RACE Table
}

and my Death Class:

public Class Death
{
    DateTime DeathDate { get; set; }
    Codef Alive { get; set; }
}   

so, the main column "Alive" in Recipient is actually referencing my Recipient.Death.Alive.Code

I Have a codef mapping class:

   public CodefMapping()
         {
             Map(x => x.Code, "CODE");
             Map(x => x.Descr, "DESCR");
         }

I am trying to do the recipient mapping and this is where I am stuck. Can I do something like this:

 HasOne<CodefMapping>(c => c.Death.Alive)
                    .PropertyRef(c => c.Code)
                    .PropertyRef(c => c.Descr)
                    .WithForeignKey("ALIVE");

It is not working :( Any help is greatly appreciated.

Thank you.


回答1:


I think you want to use the References mapping

HasOne means that the 2 entities that you are mapping together share a "mutually exclusive" identifier

http://jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/




回答2:


References is for a property mapping.

public DeathMap()
{
    References( x => x.Alive );        
}

And you need an Id for codef.

public CodefMapping()
{
    Id(x => x.Code);
    Map(x => x.Descr);
}

The default convention is for column names to match the property name, so you do not have to specify the column names unless they are different.



来源:https://stackoverflow.com/questions/2382943/hasone-vs-references-mapping-fluent-nhibernate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!