HasOne vs.引用映射Fluent NHibernate

HasOne vs.引用映射Fluent NHibernate,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,这是我第一次使用FluentNhibernate映射,并面临如何引用另一个表的问题。感谢您的帮助: 我有几个名为CD_varname的表,所有这些表都包含两列-CODE和DESCR 我有一个主表名为接收者,它有两列,称为ALIVE和SEX,都是类型编号,它们引用了表CD_ALIVE和CD_SEX。 如果收件人中的Alive=1,那么我们需要从cdu-Alive表中获取代码和descr,其中代码=1 我描述了一个Codef类: public Class Codef { int Code {

这是我第一次使用FluentNhibernate映射,并面临如何引用另一个表的问题。感谢您的帮助:

我有几个名为CD_varname的表,所有这些表都包含两列-CODE和DESCR

我有一个主表名为接收者,它有两列,称为ALIVE和SEX,都是类型编号,它们引用了表CD_ALIVE和CD_SEX。 如果收件人中的Alive=1,那么我们需要从cdu-Alive表中获取代码和descr,其中代码=1

我描述了一个Codef类:

public Class Codef
{
    int Code { get; set; }
    string Descr { get; set; }
}
我的收件人类将这些分配给组件。收件人类如下所示:

 public Class IRecepient
{
    int ID { get; set; }
    Birth Birth {get; set;}
    Death Death { get; set; }
}
 HasOne<CodefMapping>(c => c.Death.Alive)
                    .PropertyRef(c => c.Code)
                    .PropertyRef(c => c.Descr)
                    .WithForeignKey("ALIVE");
我的出生和死亡类别如下:

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
}
我的死亡等级是:

public Class Death
{
    DateTime DeathDate { get; set; }
    Codef Alive { get; set; }
}   
因此,Recipient中的主列“Alive”实际上引用了我的Recipient.Death.Alive.Code

我有一个codef映射类:

   public CodefMapping()
         {
             Map(x => x.Code, "CODE");
             Map(x => x.Descr, "DESCR");
         }
我正在尝试做收件人映射,这就是我被卡住的地方。我可以这样做吗:

 public Class IRecepient
{
    int ID { get; set; }
    Birth Birth {get; set;}
    Death Death { get; set; }
}
 HasOne<CodefMapping>(c => c.Death.Alive)
                    .PropertyRef(c => c.Code)
                    .PropertyRef(c => c.Descr)
                    .WithForeignKey("ALIVE");
HasOne(c=>c.Death.Alive)
.PropertyRef(c=>c.Code)
.PropertyRef(c=>c.Descr)
.带外国钥匙(“活着”);
无效:(非常感谢您的帮助


谢谢。

我想您应该使用
参考
映射

HasOne
表示您映射到一起的两个实体共享一个“互斥”标识符

用于属性映射

public DeathMap()
{
    References( x => x.Alive );        
}
你需要一个密码

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

默认约定是列名与属性名匹配,因此除非列名不同,否则不必指定列名。

如果是单独的死亡映射,我应该如何在收件人映射中指定?应该是:public RecipientMapping(){Id(x=>x.Id);Map(x=>x.Death);}但是,它怎么知道应该将收件人中的“活动”列绑定到CD_活动表中的“代码”列?对不起,我在这个阶段可能会在nhibernate中变傻。谢谢。链接已断开。我认为使用“相互排斥”这个短语在这种情况下是不正确的。互斥意味着两个表中的标识符集之间没有重叠。如果我正确理解链接的博客文章,我认为他指的是共享标识符。