假设我有这样的课程:
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;}
}
有人调用一个方法来保存一个新的Parent,并传递一个名称和一个子ID列表,我想保存Parent。有没有一种方法可以保存Parent并将子ID与它关联,而无需加载Child对象,然后将它们添加到Children集合中?加载对象似乎是浪费,以便当我已经拥有ID时,我可以让NHibernate保存它们,如果我在存储过程中执行它,那么我将需要保存它。
...使用 NHibernate 2.0.1GA, SQL Server 2005
乔恩
答案 0 :(得分:1)
我认为这样的事情会起作用
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);
当调用load时,它不会进入数据库来获取数据,直到它实际访问为止,所以我想这也可以帮到你。
答案 1 :(得分:0)
如果Parent与Children关联,那么每个Child中都应该有一个Parent属性(我看不到),你还是要更新Children,所以你必须加载所有的孩子来自数据库。
否则,父母和孩子之间的关系如何持续存在?如果它不只是使用Name属性保存父级,甚至不打扰孩子。
答案 2 :(得分:0)
您可以映射整数集合(即Parent.Children作为IList&lt; int&gt;),也可以映射对象集合(即Parent.Children作为IList&lt; Child&gt;)。如果映射对象,则必须使用对象更新DB,即需要加载Child对象以保存Parent。如果您选择映射整数ID,则可以通过ID进行更新。
PS。如果你的ID是其他原始类型(例如guids,string等),那么同样的参数仍然适用。