问题
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