gpt4 book ai didi

NHibernate:如何在不覆盖父实体的情况下保存新实体:

转载 作者:行者123 更新时间:2023-12-03 12:00:47 25 4
gpt4 key购买 nike

我想知道使用 NHibernate 持久化新子实体而不会意外覆盖数据库中的父实体的最佳设计是什么。

我的问题是子实体看起来像这样:

class Child
{
Parent Parent;
// other fields
}

我的问题是从 UI 层提供了子级以及父级的 ID,这意味着父级引用基本上未初始化:它将填充 ID,但其他所有内容都为空 - 因为这是填充其的唯一方法字段将是到数据库的额外往返来读取它们。

现在如果我打电话 Session.SaveOrUpdate(child)在 NHibernate 上,父级会发生什么。我不希望 NHibernate 级联保存未初始化的父级,因为这只会破坏数据库中的数据。人们将如何解决这个问题?任何最佳实践?

最佳答案

您必须使用 session.Load(parentid) 来获取聚合根。与 session.Get() 方法相反,这实际上并不从数据库中获取任何数据,它只是实例化一个 Parent 代理对象,用于将 Child 对象添加到数据库中的正确 Parent (例如,正确获取外键) .

您的代码可能类似于:

// Set the Parent to a nhibernate proxy of the Parent using the ParentId supplied from the UI
childFromUI.Parent = Session.Load<Parent>(childFromUI.Parent.Id);
Session.Save(childFromUI);

This article explains Get/Load and the nhibernate caches really well

关于NHibernate:如何在不覆盖父实体的情况下保存新实体:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4105145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com