我目前有这段代码。
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();
上面的代码有效,但我发现我这样做有点奇怪。
我想做点什么
tableB = new TableB
{
TableA = tableA,
TableC = MakeAllTableCs()
};
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();
}
}
答案 0 :(得分:0)
很难说没有你的映射和真正的NHibernate代码(你调用session.Save()
),但很可能你没有保存新的TableB
对象,也没有TableA.b
上的任何级联设置1}}(你需要其中一个)。