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)."}