如何使用 NHibernate 通过 RESTful PUT 创建实体?

发布于 2024-09-28 22:25:08 字数 570 浏览 4 评论 0原文

根据 REST 理念,PUT 操作应该创建实体(如果不存在),或者更新(如果存在)。例如,如果客户端执行此操作:

PUT http://server/user/5?firstname=John&lastname=Doe

我应该期望创建或更新 ID 为 5 的用户。

使用 NHibernate 可以轻松实现更新情况;只需检索用户并更新名字和姓氏即可。

但是,如何创建 ID 为 5 的用户?默认情况下,NHibernate 管理所有实体 ID。即使您自己设置了 ID,NHibernate 也会忽略它并用自己的 ID 替换它。如果我改用分配的 ID,那么我可以分配一个 ID 为 5 的新用户,但这样我就会失去很多 NHibernate 的功能。

换句话说,是否有一种方法可以将 NHibernate 配置为在未提供 ID 的情况下使用生成的 ID,在提供 ID 的情况下使用用户设置的 ID?如果没有,我该如何解决使用 NHibernate 创建 PUT 的问题?

According to REST philosophy, a PUT operation should create an entity if it doesn't exist, or update it if it does. So for example, if a client does this operation:

PUT http://server/user/5?firstname=John&lastname=Doe

I should expect that a user with an ID of 5 either be created or updated.

The update case is easy with NHibernate; simply retrieve the user and update the firstname and lastname.

However, how do I create a user with an ID of 5? By default, NHibernate manages all entity IDs. Even if you set the ID yourself, NHibernate will ignore it and replace it with its own. If I switch to using assigned IDs, then I can assign a new user with an ID of 5, but then I'd lose a lot of NHibernate's features.

So in other words, is there a way to configure NHibernate to use a generated ID if one is not provided, and to use the user-set ID if one is provided? If not, how do I get around this problem of PUT creation with NHibernate?

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

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

发布评论

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

评论(1

以为你会在 2024-10-05 22:25:08

如果您执行 a

PUT http://server/user/5

并且服务器创建了对象,但 nHibernate 更改了 id,则返回 HTTP 状态代码 301 - Moved permanent 并将新的 URI 放入 Location 标头中。

客户端应检测 301 并使用旧 ID 更新所有存储的 URL。

只是警告一下,PUT 语义并不是真正的创建和更新,它们是替换。因此,如果您发送仅包含姓氏和名字的表示形式,那么如果您按照规定行事,则先前存储的有关该用户的所有其他信息都会丢失。

If you do a

PUT http://server/user/5

and the server creates the object but nHibernate changes the id then, return the HTTP status code 301 - Moved permanently and put the new URI in the Location header.

The client should detect the 301 and update any stored URLs with the old Id.

Just a word of warning, PUT semantics are not really Create and Update, they are replace. So if you send a representation that contains just last name and first name, then if you do things by the book, then all other information that was previously stored about that user is lost.

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