2

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

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()从多对一删除时,插入新记录没有任何问题,并且插入外键没有任何问题,但是当我更新记录时,现有记录的外键被替换为空。

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

Fluent NHibernate 一对多关系将外键设置为空

4

2 回答 2

3

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

请参阅此解决方案链接

地图类应该是:

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();
   }
}
于 2013-01-16T07:48:23.120 回答
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
于 2012-11-28T07:47:05.707 回答