给定使用version属性和json rest-service的乐观并发,客户端只返回由Id、版本和已更改属性组成的变更集,我如何更新服务器端实体?
我想要做的是将json反序列化为分离的实体,然后使用ISession.Merge方法更新我的实体。但是,我的分离实体将有很多属性的空值,并且如果我调用merge,我的实体将用所有这些属性更新,这不是我想要的。如果有一种方法可以告诉merge忽略空的属性,并保留来自持久化实体的任何相应的非空值,这将解决我的问题。
如果无法配置merge的行为,我当然可以获得持久化实体并使用反射实现我自己的merging方法。这种方法的问题是,它要求我首先查询数据库中的实体,然后更新它,而merge方法应该将其作为一个操作来完成,除非我弄错了。
您可能会问,为什么我只想传递变更集,而不是整个实体。这是因为它允许我发送最少的数据,而且它还明确地指出了用户试图更改的内容,我可以用它来测试用户的权限。
如果不能在nhibernate的范围内做到这一点,你会怎么做呢?
发布于 2011-11-25 00:11:32
我最终在应用程序中使用了WCF Web API。我使用了一个自定义的媒体格式化程序,包装Json.NET,这让我可以反序列化为泛型和派生类型,这非常棒,而且非常有用。
我有一个ChangeSet
对象,它有几个属性,其中最重要的是一个名称-值字典。有了这个设置,我可以定义接受ChangeSet
对象的服务操作。然而,我必须显式地删除XmlMediaFormatter
。它抛出了错误,因为它不能反序列化如此复杂的对象。
在检查用户更改这些属性的权限后,我从存储库中获取对象,使用反射从更改集中更新属性,并将其保存回存储库。
如果我说实话,效果很好。:)
https://stackoverflow.com/questions/7980186
复制相似问题