通过代码进行 Nhibernate 一对一映射
Posted
技术标签:
【中文标题】通过代码进行 Nhibernate 一对一映射【英文标题】:Nhibernate One-To-One mapping by code 【发布时间】: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 具有相同的值,但在我的情况下它们是不同的。在这种情况下如何使用代码映射来定义我的映射。
【问题讨论】:
【参考方案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。以上是关于通过代码进行 Nhibernate 一对一映射的主要内容,如果未能解决你的问题,请参考以下文章