我正在模拟一个人和死亡证明书,其中一个人可以拥有零或一张死亡证明。如果我有:
public class Person
{
public string PersonId { get; set; }
public virtual DeathCertificate { get; set; }
}
和
public class DeathCertificate
{
public string DeathCertificateId { get; set; }
public string PersonId { get; set; }
public virtual Person { get; set; }
}
其中DeathCertificateId是数据库中DeathCertificate的主键。
在此人的映射中使用以下内容:
this.OneToOne(
entity => entity.DeathCertificate,
mapper =>
{
mapper.Access(Accessor.Property);
mapper.Cascade(Cascade.Detach | Cascade.Persist);
mapper.PropertyReference(p => p.Person);
mapper.Constrained(false);
});
这是死亡证明书:
this.ManyToOne(
entity => entity.Person,
mapper =>
{
mapper.Column("PERSON_ID");
mapper.Cascade(Cascade.None);
mapper.Unique(true);
});
不幸的是,每当我查询人是否加入时,这都会生成类似于以下内容的SQL:
select ...
from person p
left outer join deathcertificate dc
on dc.person_id = p.person_id
where p.person_id = 'ABC123'
所以一切正常,但是当我明确加入死亡证书时,我只想要死亡证明。
我认为我的映射中出现了问题。有人可以帮忙吗?
答案 0 :(得分:1)
更改:
mapper.Constrained(false);
到
mapper.Constrained(true);
DeathCertificate映射上的解决了我的问题。
有关详细信息,请参阅https://ayende.com/blog/3960/nhibernate-mapping-one-to-one。