好吧,我想我有一个我没有在其他地方见过的场景。我有一种情况,我有一个对象类型需要能够随着时间的推移而改变,同时在同一个表中保留更改的历史记录(而不是仅在审计表中)。
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));
一如既往,任何想法都非常感激!
答案 0 :(得分:2)
HasOne
或one-to-one
关系在NHibernate中有点特殊关系。它(通常)是两个单独表之间的推断关系,从而关联共享主键值的记录。你不太可能让HasOne
为你的情况工作。我的博客I think you mean a many-to-one, sir上有一篇帖子,其中涉及HasOne
关系的一些误解。
相反,您应该考虑使用References
,这是many-to-one
关系,并且支持自引用关系。