当使用NHibernate插入或保存时,应该给对象代理什么值?



假设我们有类tablecchild和类TableParent。它们对应于数据库中的类似表。TableChild和TableParent的名称表明它们之间存在关系。TableChild类有一个TableParent类型的属性来复制我们类中的关系。现在当我为TableChild插入一个新对象时,我们如何为TableParent的属性提供值。我们应该把TableParent的ID赋值给TestChild吗?或者我们使用TableParent的ID值从DB中获取整个对象,然后将这个对象分配给TableChild。第二种方法是可行的,但会带来更多的性能开销,因为我们必须发出额外的Select语句。

我们正在使用的映射是简单的如果可能的话,请建议一些简单的方法来将关系存储到子表中,同时为相同的子表插入新值。

在c#中,关系是对象引用。

public class TableParent
{
}
public class TableChild
{
    TableParent Parent { get; set; }
}

要创建一个有已知父对象的子对象,给它一个NHibernate知道的父对象。使用ISession.Load()提供了一个代理对象,而不涉及数据库(假设没有禁用延迟加载)。

// create and save a child with a known parent
var c = new TableChild {
    Parent = session.Load<TableParent>( parent_id );
};
session.Save( c );

最新更新