使用 Nhibernate 无状态会话更新子外键

发布于 2024-12-03 18:46:04 字数 557 浏览 3 评论 0原文

我知道,在使用无状态会话时,必须显式保存对象关联(子级)

如果我有以下对象:

public class Parent()
{
    public int Id {get;set;}
    public string Name {get;set;}
    public IList<Child> Childs {get;set;}
}

public class Child()
{
    public int Id {get;set;}
    public string Name {get;set;}
}

我修改父级的实例并向其添加一个子级,然后使用以下语句保存父级和子级:

statelesssession.Update(parentInstance);
statelesssession.Insert(parentInstance.Childs.Last());

执行此操作会成功更新父记录并创建子记录,但是子表中的字段 Parent_Id 保持为空,因此不会记录关联。

如何使用无状态会话手动记录关联?

I understand that while using the stateless session one must explicitly save an object association (child)

If I have the following objects:

public class Parent()
{
    public int Id {get;set;}
    public string Name {get;set;}
    public IList<Child> Childs {get;set;}
}

public class Child()
{
    public int Id {get;set;}
    public string Name {get;set;}
}

I modify an instance of parent and add one child to it, I then save the parent and child using the following statements:

statelesssession.Update(parentInstance);
statelesssession.Insert(parentInstance.Childs.Last());

Doing this updates sucessfully the parent and creates the child record, however the field Parent_Id from the Child Table stays null, therefore there the association is not recorded.

How can I manually record the association using the stateless session?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖兔^ω^ 2024-12-10 18:46:04

我在 Child 上没有看到指向 Parent多对一属性。这就是 NHibernate 用于保存 Parent_id 列的内容。您需要:

public class Child
{
    public int Id {get;set;}
    public Parent Parent {get;set;} // this is missing
    public string Name {get;set;}
}

...以及相应的 NHibernate 映射。另外,请确保在将子级添加到父级时设置 child.Parent 的值。

另一件事,考虑到您描述的事件顺序(“我创建父级的实例并向其添加一个子级”),我希望看到父级的 Insert 而不是 更新

I don't see a many-to-one property on Child that points back to Parent. That's what NHibernate would use for saving the Parent_id column. You need:

public class Child
{
    public int Id {get;set;}
    public Parent Parent {get;set;} // this is missing
    public string Name {get;set;}
}

... and the corresponding NHibernate mapping. Also, make sure that you set the value of child.Parent when you add the child to the parent.

Another thing, given the sequence of events you describe ("I create an instance of parent and add one child to it") I would have expected to see an Insert for the parent instead of an Update.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文