【发布时间】: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