Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net NHibernate:Fluent中的映射不正确,在检索所有查询完成时导致结果重复_Asp.net_Nhibernate_Mapping_Duplicates_Fluent Nhibernate Mapping - Fatal编程技术网

Asp.net NHibernate:Fluent中的映射不正确,在检索所有查询完成时导致结果重复

Asp.net NHibernate:Fluent中的映射不正确,在检索所有查询完成时导致结果重复,asp.net,nhibernate,mapping,duplicates,fluent-nhibernate-mapping,Asp.net,Nhibernate,Mapping,Duplicates,Fluent Nhibernate Mapping,简言之:查询到parents表的结果parents+来自子级的记录。孩子们对父母有FKs,所以我有和孩子们的FKs数量一样多的复制品。 我正在ASP.NET MVC3项目中使用Fluent.NHibernate DB看起来像这样 型号: 映射: 查询: 这对我来说似乎是不正确的,我不知道你为什么在你的孩子班上过度使用Id。您将如何为child.id返回parent.id 当然应该是这样 public int id { get; set;} 如果您确实需要这样做,那么您还需要在您的子类中重写以下

简言之:查询到parents表的结果parents+来自子级的记录。孩子们对父母有FKs,所以我有和孩子们的FKs数量一样多的复制品。 我正在ASP.NET MVC3项目中使用Fluent.NHibernate

DB看起来像这样

型号:

映射:

查询:


这对我来说似乎是不正确的,我不知道你为什么在你的孩子班上过度使用Id。您将如何为child.id返回parent.id

当然应该是这样

public int id { get; set;}
如果您确实需要这样做,那么您还需要在您的子类中重写以下内容,以便NHibernate知道什么是唯一的子记录

public override int GetHashCode() 
override bool Equals(object obj)
有关更多信息,请参阅或

public class ParentMapper: ClassMap<Parent>
{
    Table("parents");
    Id(x => x.Id).GeneratedBy.Native();
    Map(x => x.SystemName, "system_name").Not.Nullable();
}

public class ChildMapper: ClassMap<Child>
{
    Table("children");
    Id(x => x.Id).GeneratedBy.Native();
    Map(x => x.DisplayName, "display_name");
    References(x => x.ParentId).Column("parent_id").Cascade.None().ForeignKey("FK_parent_id_to_id_in_parents");
}
using(ITransaction tr = session.BeginTransaction())
{
    List<Parent> lp = new List<Parent>(session.CreateCriteria(typeof(Parent)).List<Parent>());
    tr.Commit();
}
 public override int Id
   {
      get
      {
             return base.Id;
       }
      set
      {
             base.Id = value;
      }
   }
public int id { get; set;}
public override int GetHashCode() 
override bool Equals(object obj)