Fluent nhibernate使用Inverse时一对多子表的外键为null

Fluent nhibernate使用Inverse时一对多子表的外键为null,nhibernate,fluent-nhibernate,one-to-many,Nhibernate,Fluent Nhibernate,One To Many,我有一个父表和子表,使用一对多关系创建和映射实体。在一对多方面,当我使用Inverse时,子表的外键值被插入为null public class TableA { public virtual long ID { get; set; } public virtual string Name { get; set; } public virtual IList<TableB> TableB { get; set; } } public class TableB {

我有一个父表和子表,使用一对多关系创建和映射实体。在一对多方面,当我使用Inverse时,子表的外键值被插入为null

public class TableA
{
   public virtual long ID { get; set; }
   public virtual string Name { get; set; }
   public virtual IList<TableB> TableB { get; set; }
}

public class TableB
{
   public virtual long ID { get; set; }
   public virtual string Name { get; set; }
   public virtual TableA TableA { get; set; }
}

public class TableAMap : ClassMap<TableA>
{
   public TableAMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      HasMany(x=>x.TableB)
          .KeyColumn("TableA_ID")
          .Inverse()
          .Cascase.All()
          .Not.LazyLoad();
   }
}

public class TableBMap : ClassMap<TableB>
{
   public TableBMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      References(x=>x.TableA).Column("TableA_ID").Not.LazyLoad();
   }
}
注意:当从多对一中删除逆时,插入的新记录没有任何问题,插入的外键没有任何问题,但当我更新记录时,现有记录的外键被替换为null

public class TableA
{
   public virtual long ID { get; set; }
   public virtual string Name { get; set; }
   public virtual IList<TableB> TableB { get; set; }
}

public class TableB
{
   public virtual long ID { get; set; }
   public virtual string Name { get; set; }
   public virtual TableA TableA { get; set; }
}

public class TableAMap : ClassMap<TableA>
{
   public TableAMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      HasMany(x=>x.TableB)
          .KeyColumn("TableA_ID")
          .Inverse()
          .Cascase.All()
          .Not.LazyLoad();
   }
}

public class TableBMap : ClassMap<TableB>
{
   public TableBMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      References(x=>x.TableA).Column("TableA_ID").Not.LazyLoad();
   }
}
请帮帮我,我也问过类似的问题,但对我没有帮助


如果看不到插入的代码,很难准确地说出。但是我的水晶球告诉我你可能忘了最后一行

Parent parent = new Parent();
Child child = new Child();
parent.Children.Add(child);
child.Parent = parent;     <-- this is important because this will maintain the foreign key

如果看不到插入的代码,很难准确地说出。但是我的水晶球告诉我你可能忘了最后一行

Parent parent = new Parent();
Child child = new Child();
parent.Children.Add(child);
child.Parent = parent;     <-- this is important because this will maintain the foreign key

请参阅此链接,其中包含此问题的解决方案

映射类应为:

public class TableAMap : ClassMap<TableA>
{
   public TableAMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      HasMany<TableB>(x=>x.TableB)
          .KeyColumn("TableA_ID")
          .Cascade.All().Inverse();
   }
}

public class TableBMap : ClassMap<TableB>
{
   public TableBMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      References<TableA>(x=>x.TableA).Column("TableA_ID").Not.Nullable();
   }
}

请参阅此链接,其中包含此问题的解决方案

映射类应为:

public class TableAMap : ClassMap<TableA>
{
   public TableAMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      HasMany<TableB>(x=>x.TableB)
          .KeyColumn("TableA_ID")
          .Cascade.All().Inverse();
   }
}

public class TableBMap : ClassMap<TableB>
{
   public TableBMap()
   {
      Id(x=>x.ID);
      Map(x=>x.Name).Column("Name");
      References<TableA>(x=>x.TableA).Column("TableA_ID").Not.Nullable();
   }
}

你应该发布你的真实地图。您的HasManyx=>x.TableB.keycolumntalea\u ID.Inverse.Cascase.All.Not.LazyLoad;似乎不适用于Yes抱歉,我已更正HasManyx=>x.TableB.KeyColumnTableA\u ID.Inverse.Cascase.All.Not的错误‌​.懒散;这个例子很难理解。同样,我认为您应该发布实际代码或其子集,以及您当前使用的模式。您应该发布真正的映射。您的HasManyx=>x.TableB.keycolumntalea\u ID.Inverse.Cascase.All.Not.LazyLoad;似乎不适用于Yes抱歉,我已更正HasManyx=>x.TableB.KeyColumnTableA\u ID.Inverse.Cascase.All.Not的错误‌​.懒散;这个例子很难理解。同样,我认为您应该发布实际代码或其子集,以及您当前使用的模式。