【发布时间】:2015-03-28 23:52:50
【问题描述】:
我有一个父子关系,其中父级没有对子级的引用 - 像这样:
class Child
{
int Id { get; set;
Parent Parent { get; set; }
// + other stuff
}
class Parent
{
int Id { get; set; }
// + other stuff
}
在数据库中,这仅仅意味着Child 表有一个ParentID 列。此列可以为空 - 即可以有一个 Parent-less Child。
我正在使用 Fluent 约定映射域,但是这种关系有一个覆盖,以便我们可以更新 Child 并同时创建一个新的 Parent:
public class ChildOverride : IAutoMappingOverride<Child>
{
public void Override(AutoMapping<Child> mapping)
{
mapping.References(x => x.Parent).Cascade.All();
}
}
当我们将新的Parent 添加到现有的Child 并立即需要读取该父级的 ID(在事务中)时,就会出现问题,例如:
existingChild.CreateParent(parameters);
session.Save(existingChild);
Debug.WriteLine(existingChild.Parent.Id);
这只是打印 0 而不是给我新父级的 ID - 我曾假设 Cascade.All() 会......嗯,级联。有错吗?
如果我在访问 Id 之前提交事务,一切都很好,或者如果我明确保存新的 Parent 也可以,例如
// This works
existingChild.CreateParent(parameters);
session.Save(existingChild);
transaction.Commit();
Debug.WriteLine(existingChild.Parent.Id);
// This also works
existingChild.CreateParent(parameters);
session.Save(existingChild);
session.Save(existingChild.Parent);
Debug.WriteLine(existingChild.Parent.Id);
有什么方法可以更改我的覆盖,以便保存子对象将允许立即访问父 ID? (或者还有什么我做错了吗?)
【问题讨论】:
标签: c# nhibernate fluent-nhibernate