如何将NHibernateMap用于外键?

如何将NHibernateMap用于外键?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有以下课程: public class Element { public Guid Id { get; set; } public ElementRouting route { get; set; } } public class ElementRouting { public Guid Id { get; set; } public Element ParentElement { get; set;}

我有以下课程:

public class Element
    {
        public Guid Id { get; set; }
        public ElementRouting route { get; set; }
    }
public class ElementRouting
    {
        public Guid Id { get; set; }
        public Element ParentElement { get; set;}
        public Element ChildElement { get; set; }
    }
可以将一个元素路由到类似父子关系的另一个元素,该关系由以下类表示:

public class Element
    {
        public Guid Id { get; set; }
        public ElementRouting route { get; set; }
    }
public class ElementRouting
    {
        public Guid Id { get; set; }
        public Element ParentElement { get; set;}
        public Element ChildElement { get; set; }
    }
元素的NHibernateMap如下所示:

public class ElementMapping : ClassMap<Element>
{
    public ElementMapping()
    {
        Id(x => x.Id).GeneratedBy.Assigned();
        Not.SelectBeforeUpdate();
        References(x => x.Route).Column("ElementRoutingId").Nullable();

        Table("Elements");
    }
}
公共类元素映射:类映射
{
公共元素映射()
{
Id(x=>x.Id).GeneratedBy.Assigned();
不是。选择BeforeUpdate();
引用(x=>x.Route).Column(“ElementRoutingId”).Nullable();
表(“要素”);
}
}
…ElementRouting的地图如下所示:

public class ElementRoutingMapping : ClassMap<ElementRouting>
{
    public ElementRoutingMapping()
    {
        Id(x => x.Id).GeneratedBy.Assigned();
        Map(x => x.ChildElement).Column("ElementId").Nullable();
        Map(x => x.ParentElement).Column("ElementId").Nullable();

        Table("ElementRoutings");
    }
}
公共类元素路由映射:类映射
{
公共元素路由映射()
{
Id(x=>x.Id).GeneratedBy.Assigned();
Map(x=>x.ChildElement).Column(“ElementId”).Nullable();
Map(x=>x.ParentElement).Column(“ElementId”).Nullable();
表(“要素路线”);
}
}
在I
session.Flush()
的时候,我有一个属性ElementRouting为null的元素对象。我得到一个HibernateException(执行批处理查询时发生异常),其中包含以下InnerException详细信息:

{“UPDATE语句与外键约束“FK54CBB3751C1EAB64”冲突。冲突发生在数据库“myDataBaseName”、表“dbo.ElementRoutings”、列“Id”中


有人能解释一下我做错了什么吗?

对于元素映射对路线的引用,使用:

References(x => x.TonsRoute).Column("TonsRouteId").Nullable().Cascade.All();

这不会导致冲突。

首先,我意识到路由映射的ChildElement和ParentElement属性映射应该是.Column(“ChildElementId”)和.Column(“ParentElementId”)分别是因为我们实际指定的是这个表中的列本身。另外,它们不应该为null,因为实际路由在元素映射上是可以为null的。