如何设置nhibernate来处理此问题?
我现在有这个代码如何设置nhibernate来处理此问题?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我现在有这个代码 tableB = new TableB { TableA = tableA, }; List<TableC> tableC = locations.Select(location => new TableC {
tableB = new TableB
{
TableA = tableA,
};
List<TableC> tableC = locations.Select(location => new TableC
{
TableB = tableB
}).ToList();
tableB.TableC = tableC;
tableA.TableB.Add(tableB);
nhibernate.Create(a);
nhibernate.Commit();
tableC的集合是在内存中创建的,当我尝试创建时,我得到了
not-null property references a null or transient value
似乎它想为TableC集合中的每一个引用TableB。这样做似乎有点奇怪,因为我粘在TableB对象中。我本希望它能弄明白这一点,并将其作为参考
我是否可以这样做,这样我就不需要在每个TableC对象中引用TableB
编辑映射
public class TableAMap : ClassMap<TableA>
{
public TableAMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
HasMany(x => x.).Cascade.All().Inverse();
}
}
public class TableBMap : ClassMap<TableB>
{
public TableBMap ()
{
Id(x => x.Id).GeneratedBy.GuidComb();
References(x => x.TableA).Not.Nullable();
HasMany(x => x.TableC).Cascade.All().Inverse();
}
}
public class TableCMap : ClassMap<TableC>
{
public TableCMap ()
{
Id(x => x.Id).GeneratedBy.GuidComb();
References(x => x.TableB).Not.Nullable();
}
}
公共类表映射:类映射
{
公共表映射()
{
Id(x=>x.Id).GeneratedBy.GuidComb();
HasMany(x=>x.).Cascade.All().Inverse();
}
}
公共类表映射:类映射
{
公共表映射()
{
Id(x=>x.Id).GeneratedBy.GuidComb();
引用(x=>x.TableA).Not.Nullable();
HasMany(x=>x.TableC).Cascade.All().Inverse();
}
}
公共类表cmap:ClassMap
{
公共表CMAP()
{
Id(x=>x.Id).GeneratedBy.GuidComb();
引用(x=>x.TableB).Not.Nullable();
}
}
如果没有映射和真正的NHibernate代码(在这里调用session.Save()
),很难说,但很可能您没有保存新的TableB
对象,而且TableA.b
上也没有任何级联设置(您需要其中的一个)。确定我已更新以显示映射。如果需要更多信息,请告诉我。@chobo2似乎在保存之前没有设置对父对象的引用(TableB.TableA
和TableC.TableB
)。
public class TableAMap : ClassMap<TableA>
{
public TableAMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
HasMany(x => x.).Cascade.All().Inverse();
}
}
public class TableBMap : ClassMap<TableB>
{
public TableBMap ()
{
Id(x => x.Id).GeneratedBy.GuidComb();
References(x => x.TableA).Not.Nullable();
HasMany(x => x.TableC).Cascade.All().Inverse();
}
}
public class TableCMap : ClassMap<TableC>
{
public TableCMap ()
{
Id(x => x.Id).GeneratedBy.GuidComb();
References(x => x.TableB).Not.Nullable();
}
}