我有两个实体:
public class Parent()
{
public ICollection<Child> Children { get; set; }
}
public class Child()
{
public Parent Parent { get; set; }
}
映射如下所示:
public class ParentMap : ClassMap<Parent>
{
HasMany(x => x.Children).Cascade.All().Inverse();
}
public class ChildMap : ClassMap<Child>
{
References(x => x.Parent).Cascade.None();
}
通常,为了拯救父母或孩子,您必须执行以下操作:
var parent = new Parent();
var child = new Child();
parent.Children.Add(child);
child.Parent = parent;
Session.SaveOrUpdate(parent);
换句话说,您必须在这两个对象中设置属性,以便 NHibernate 正确地保留此实体。
但是,对于遗留问题,我想保存这个实体而不必设置双方,这样我就可以这样做:
var parent = new Parent();
var child = new Child();
child.Parent = parent;
Session.SaveOrUpdate(child);
在这种情况下,我不将子对象添加到父Children
集合中,我只是Parent
在子对象上设置。
有什么方法可以让 NHibernate 正确地保存它,这样当我从数据库中取出父级时,它的Children
集合中就会有子级?
PS 我意识到会话缓存存在潜在问题,并且依赖 NHibernate 执行一些幕后操作以使数据模型正确,但我现在忽略了这个问题。