NHibernate-仅当我有孩子ID时保存家长

NHibernate-仅当我有孩子ID时保存家长,nhibernate,Nhibernate,假设我有这样的课程: public class Parent { public int ParentId {get;set;} public IList<Child> Children {get;set;} public string Name {get;set;} } public class Child { public int ChildId {get;set;} } 公共类父类 { public int ParentId{get;set;} 公共I

假设我有这样的课程:

public class Parent
{
   public int ParentId {get;set;}
   public IList<Child> Children {get;set;}
   public string Name {get;set;}
}

public class Child
{
   public int ChildId {get;set;}
}
公共类父类
{
public int ParentId{get;set;}
公共IList子项{get;set;}
公共字符串名称{get;set;}
}
公营儿童
{
public int ChildId{get;set;}
}
有人调用一个方法来保存一个新的父对象,并向我传递一个名称和子ID列表,我想保存父对象。是否有一种方法可以保存父对象并将子ID与之关联,而无需加载子对象,然后将其添加到子集合?加载对象只是为了让NHibernate在我已经拥有ID的情况下保存它们,这似乎是一种浪费,如果我在存储过程中保存父对象,这就是我所需要的

使用。。。 NHibernate 2.0.1GA, SQL Server 2005


Jon

如果父对象与子对象关联,那么每个子对象中都应该有一个Parent属性(我没有看到),并且您必须更新子对象,因此您必须从数据库中加载所有子对象


否则,父母和孩子之间的关系如何持续?如果不只是用Name属性保存父对象,甚至不用考虑子对象。

您可以映射一个整数集合(即parent.children作为IList),也可以映射一个对象集合(即parent.children作为IList)。如果映射对象,则必须使用对象更新数据库,即需要加载子对象以保存父对象。如果选择映射整数ID,则可以通过ID进行更新


另外,如果您的ID是其他一些基本类型(例如GUID、字符串等),那么相同的参数仍然适用。

我认为类似的方法可以工作

var child1 = Session.Load<Child>(12);
var child2 =Session.Load<Child>(23);
var parent = Session.Get(253);
parent.Name = "new parent name";
parent.Children.Add(child1);
parent.Children.Add(child2);
var child1=Session.Load(12);
var child2=Session.Load(23);
var parent=Session.Get(253);
parent.Name=“新父名称”;
parent.Children.Add(child1);
parent.Children.Add(child2);
当调用load时,它不会进入数据库获取数据,直到它真正被访问,所以我想这也会为您带来好处