Fluent NHibernate错误放置的重复字段

Fluent NHibernate错误放置的重复字段,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我想我误解了这是怎么回事。这是我的fluent映射: public class FunctionInfoMap : ClassMap<FunctionInfo> { public FunctionInfoMap() { Id(x => x.Id); Map(x => x.Name); Map(x => x.Signature); Map(x => x.IsNative); Map(x => x.ClassId);

我想我误解了这是怎么回事。这是我的fluent映射:

public class FunctionInfoMap : ClassMap<FunctionInfo>
 {
  public FunctionInfoMap()
  {
   Id(x => x.Id);
   Map(x => x.Name);
   Map(x => x.Signature);
   Map(x => x.IsNative);
   Map(x => x.ClassId);
   References(x => x.Class, "ClassId");
   HasMany(x => x.CallsAsParent).Inverse();
   HasMany(x => x.CallsAsChild).Inverse();
   Table("Functions");
  }
 }

 public class CallMap : ClassMap<Call>
 {
  public CallMap()
  {
   CompositeId()
    .KeyProperty(x => x.ThreadId)
    .KeyProperty(x => x.ParentId)
    .KeyProperty(x => x.ChildId)
    .Mapped();
   Map(x => x.ThreadId).Index("Calls_ThreadIndex");
   Map(x => x.ParentId).Index("Calls_ParentIndex");
   Map(x => x.ChildId).Index("Calls_ChildIndex");
   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Parent, "ParentId");
   References(x => x.Child, "ChildId");
   Table("Calls");
  }
 }

 public class SampleMap : ClassMap<Sample>
 {
  public SampleMap()
  {
   CompositeId()
    .KeyProperty(x => x.ThreadId)
    .KeyProperty(x => x.FunctionId)
    .Mapped();
   Map(x => x.ThreadId);
   Map(x => x.FunctionId);
   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Function, "FunctionId");
   Table("Samples");
  }
 }

我不明白它为什么在那里,因为它应该只存在于Samples表中。

您不应该同时映射外键和多吨一关系。而不是

   Map(x => x.ThreadId).Index("Calls_ThreadIndex");
   Map(x => x.ParentId).Index("Calls_ParentIndex");
   Map(x => x.ChildId).Index("Calls_ChildIndex");
   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Parent, "ParentId");
   References(x => x.Child, "ChildId");
将多个映射到使用外键的

   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Parent, "ParentId");
   References(x => x.Child, "ChildId");

我不知道这是否能解决你的问题。另外,我强烈建议不要使用复合键。用代理键(标识)和唯一索引替换它们

我终于或多或少地解决了这个问题。FunctionInfoMap上的两个集合让NHibernate感到困惑,因为它们实际上并没有引领任何方向。添加KeyColumn条目以将它们链接到父级和子级关联,纠正了杂散字段。

不幸的是,杂散字段仍然存在。
   Map(x => x.HitCount);
   References(x => x.Thread, "ThreadId");
   References(x => x.Parent, "ParentId");
   References(x => x.Child, "ChildId");