使用反向时,流畅的nhibernate一对多子表的外键为空

时间:2012-11-27 01:48:57

标签: nhibernate fluent-nhibernate one-to-many

我有一个父表和子表,并且使用一对多关系来创建和映射entites。在使用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();
   }
}

注意Inverse()从多个删除为1时,插入的新记录没有任何问题,插入外键没有任何问题,但是当我更新记录时,外键将现有记录替换为null。

请帮助我,我看了类似的问题,但它没有帮助我。

Fluent NHibernate one-to-many relationship setting foreign key to null

2 个答案:

答案 0 :(得分:3)

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

Refer this Solution link

地图类应为:

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();
   }
}

答案 1 :(得分:1)

如果没有看到插入的代码,很难确切地说出来。然而,我的水晶球告诉我你可能忘记了最后一行

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