fluent nhibernate:相同类型的compositeid(),未映射消息id

fluent nhibernate:相同类型的compositeid(),未映射消息id,nhibernate,fluent-nhibernate,many-to-many,composite-primary-key,Nhibernate,Fluent Nhibernate,Many To Many,Composite Primary Key,我搜索过谷歌,但没有遇到任何人有同样的问题。这是我的模型: public class Hierarchy { public virtual Event Prerequisite { get; set; } public virtual Event Dependent { get; set; } public override bool Equals(object obj) { var other = obj as Hierarchy;

我搜索过谷歌,但没有遇到任何人有同样的问题。这是我的模型:

public class Hierarchy
{
    public virtual Event Prerequisite { get; set; }
    public virtual Event Dependent { get; set; }

    public override bool Equals(object obj) 
    {
        var other = obj as Hierarchy; 
        if (other == null) 
        { 
            return false; 
        } 
        else 
        { 
            return this.Prerequisite == other.Prerequisite && this.Dependent == other.Dependent; 
        } 
    }

    public override int GetHashCode()
    {
        return (Prerequisite.Id.ToString() + "|" + Dependent.Id.ToString()).GetHashCode();
    }
}
以下是我的映射:

public class HierarchyMap : ClassMap<Hierarchy>
{
    public HierarchyMap()
    {
        CompositeId()
            .KeyReference(h => h.Prerequisite, "PrerequisiteId")
            .KeyReference(h => h.Dependent, "DependentId");
    }
}
是否需要进行一些特殊配置以启用复合id?我有最新的FNh(截至2012年6月29日)

编辑


我认为这个问题是开放的,即使我已经决定映射ID和引用2事件而不是使用CypITEID。请随意提出答案。

我发现这是因为自动映射试图自动映射ID
尽管我的类有一个实际的映射,但它仍然尝试自动映射ID。一旦我将该类从自动映射中排除,它就工作得很好。

这看起来不错,我的一个简单示例不会抛出。您确定没有其他未映射的opr旧版本的映射吗?这是一个我正在尝试更新Schema()的新实体。我已经仔细检查了dll版本。我试图深入研究配置默认值,看看是否有需要覆盖的内容。但是,根据Nhibernate的来源,“宁愿使用代理密钥而不是复合密钥。”所以我可能会放弃,完全忘记CompositeId。使用代理ID肯定更好。然而,如果你评论一个keyreference,它会更好吗?一个聪明的测试但它仍然需要映射Id。最后的测试是映射Id属性,然后再次看到它失败^^
{"The entity 'Hierarchy' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id)."}