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

时间:2010-10-23 21:58:22

标签: c# nhibernate rest fluent-nhibernate identity

根据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(如果提供了一个)?如果没有,我如何解决使用NHibernate创建PUT的问题?

1 个答案:

答案 0 :(得分:0)

如果你做了

PUT http://server/user/5

并且服务器创建对象但是nHibernate更改了id,然后返回HTTP状态代码301 - Moved permanently并将新URI放在Location头中。

客户端应检测301并使用旧Id更新任何存储的URL。

只是一句警告,PUT语义不是真正的创建和更新,它们是替换。因此,如果您发送的表示只包含姓氏和名字,那么如果您按照书籍执行操作,那么之前存储的有关该用户的所有其他信息都将丢失。