Fluent nhibernate使用Inverse时一对多子表的外键为null
我有一个父表和子表,使用一对多关系创建和映射实体。在一对多方面,当我使用Inverse时,子表的外键值被插入为nullFluent 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 {
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的错误.懒散;这个例子很难理解。同样,我认为您应该发布实际代码或其子集,以及您当前使用的模式。