【问题标题】:Nhibernate One-To-One mapping by code通过代码进行 Nhibernate 一对一映射
【发布时间】:2014-11-14 10:30:19
【问题描述】:

当引用列不是第二个表上的主键列时,我正在尝试找出一种在 nhibernate 中映射一对一关系的方法。

例如考虑

Person Table 
   PersonId (pk)
   Name

Passport Table 
   PassportId (pk)
   Country
   PersonId

这两个表在 PersonId 上是一一对应的关系。

我的 Nhibernate 模型如下所示。

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Passport Passport { get; set; }
}

public class Passport
{
    public virtual int Id { get; set; }
    public virtual string Country { get; set; }
    public virtual Person Person { get; set; }
}

根据this article的解释表,我定义了如下关系映射,但它不起作用

人物映射:

OneToOne(x => x.Passport, x => x.Cascade(Cascade.All));

护照映射:

ManyToOne(x => x.Person, x => { x.Unique(true); x.Column("PersonId");});

如下构造sql查询

select * from Person
left outer join  Passport on Persson.PersonId = Passport.PassportId.

它假定 PassportId 和 PersonId 具有相同的值,但在我的情况下它们是不同的。在这种情况下如何使用代码映射来定义我的映射。

【问题讨论】:

    标签: c# sql nhibernate fluent-nhibernate mapping-by-code


    【解决方案1】:

    我希望我的帖子对您​​有所帮助,我将向您展示我是如何进行这些映射的: 人的映射:

      HasOne(x=>x.Passport).Cascade.All();
    

    还有护照:

      References(x => x.Person).Unique();
    

    希望这会有所帮助。 稍后,当您要创建新记录时,请执行以下操作:

     var person = new Person();
     person.Passport = new Passport(){Person = person};
    

    【讨论】:

    • 这个答案正在使用流利的 nhibernate,但问题是 Mapping By Code。
    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2012-04-09
    • 2011-06-14
    相关资源
    最近更新 更多