使用Fluent NHibernate一对一自我引用

时间:2010-09-29 21:35:35

标签: fluent-nhibernate

好吧,我想我有一个我没有在其他地方见过的场景。我有一种情况,我有一个对象类型需要能够随着时间的推移而改变,同时在同一个表中保留更改的历史记录(而不是仅在审计表中)。

public class Item 
{
    public virtual int Id { get; set; }
    public virtual ....
    public virtual Item Replaces { get; set; }
    public virtual Item ReplacedBy { get; set; }
}

我很困惑如何在Fluent NHIbernate中表示这一点。在数据库中,我不需要Replaces和ReplacedBy字段 - 我可以从其中一个获取信息。但我认为我需要在NHibernate的对象中找到它。

目前,我有这个,但它根本不会生成数据库映射:

mapping.HasOne(t => t.ReplacedBy).ForeignKey("Id").Class(typeof(Item));

一如既往,任何想法都非常感激!

1 个答案:

答案 0 :(得分:2)

HasOneone-to-one关系在NHibernate中有点特殊关系。它(通常)是两个单独表之间的推断关系,从而关联共享主键值的记录。你不太可能让HasOne为你的情况工作。我的博客I think you mean a many-to-one, sir上有一篇帖子,其中涉及HasOne关系的一些误解。

相反,您应该考虑使用References,这是many-to-one关系,并且支持自引用关系。