如何使用json变更集更新我的实体?

时间:2011-11-02 12:20:02

标签: json nhibernate

鉴于使用版本属性和json rest-service的乐观并发,客户端只返回由Id,Version和更改的属性组成的更改集,如何更新服务器端实体?

我想要做的是将我的json反序列化为一个detatched实体,然后使用ISession.Merge方法更新我的实体。但是,我的分离实体将拥有许多属性的空值,如果我调用merge,我的实体将更新所有这些,这不是我想要的。如果有一种方法可以告诉merge忽略null的属性,并保留持久化实体中任何可以解决我的问题的相应非空值。

如果无法配置合并行为,我当然可以获取持久化实体并使用反射实现我自己的合并方法。这种方法的问题是它要求我首先查询实体的数据库然后更新它,而合并方法应该作为一个操作执行此操作,除非我弄错了。

您可能会问为什么我只想传递更改集而不是完整实体。这是因为它允许我发送最少的数据,它还表明用户试图更改的内容,我可以用它来测试用户权限。

如果无法在nhibernate的范围内执行此操作,您将如何进行?

1 个答案:

答案 0 :(得分:0)

我最终使用WCF Web API作为我的申请。我正在使用自定义媒体格式化程序,包装Json.NET。这允许我反序列化为泛型和派生类型,这非常棒,非常有用。

我有一个ChangeSet对象,它有一些属性,其中最重要的是名称 - 值字典。通过此设置,我可以定义采用ChangeSet个对象的服务操作。但是我必须明确删除XmlMediaFormatter。它抛出了错误,因为它无法对这些复杂的对象进行反序列化。

在检查用户更改这些属性的权限后,我从存储库中获取对象,使用反射从更改集更新属性,并将其保存回存储库。

如果我是诚实的,那就很漂亮。 :)

相关问题