我正在使用Fluent NHibernate在数据库中插入父对象, 这个对象有一个子对象,这个子对象已经存在于数据库中,但我只有这个孩子的id。
如何使用外键(子)插入父对象,只将id设置为子对象?
示例:
ObjectParent parent = new ObjectParent();
ObjectChild child = new ObjectChild();
child.Id = 5; // 5 is the id from the child in the database
parent.Child = child;
Service.Create(parent); // here I need to insert the parent with the referenced foreign key (id = 5)
编辑:
我无法从数据库中获取子对象。
答案 0 :(得分:1)
在NHibernate级别,您可以使用由ISession
创建的代理。
如果您确定ID(例如5)存在,则可以致电session.Load<Child>(5)
。这将为您返回proxy
,实际上根本不需要加载。将该代理插入父代,只会为 Parent
Create(Parent parent, int childId)// = 5)
{
child = session.Load<Child>(5);
parent.Child = child;
session.Save(parent);
扩展:
如何处理引用的另一种方法可能是不同的映射。我通常将这两个属性用于Reference及其RefererenceId:
<property not-null="true" name="ChildId" insert="false" update="false" />
<many-to-one name="Child" column="ChildId" />
在您的情况下,解决方案将使用类似的解决方案,但具有可更新的ID proeprty
<property not-null="true" name="ChildId" />
<many-to-one name="Child" column="ChildId" insert="false" update="false" />
父母同时具有两种属性
class Parent
{
public virtual Child Child { get; set; }
public virtual int ChildId { get; set; }
代码如
parent.ChildId = 5;
答案 1 :(得分:0)
使用stateless session,因为它不关心(子)实体之间的关系默认情况。它带来了真正的性能提升,请参阅my post中的示例。