对同一对象进行多次反序列化是否应该创建新实例?

时间:2013-07-17 10:04:54

标签: asp.net-mvc json entity-framework serialization

在我的场景中,我在序列化实体框架中的对象上有一个 MVC ,其中我已经覆盖 GetHashCode Equal 方法,因为< strong>这些对象的Id在提交到数据库后是不可变的。
我也有一些客户端,无法访问数据库,但连接到iis以通过json序列化这些实体并使用newtonsoft.json在本地反序列化。
当我第二次在客户端反序列化它们时,为了刷新它们中的数据,我希望现有的实例能够自动更新。

我期待有点太多了? 我应该编写一些克隆方法来复制属性并检查现有ID的缓存吗? 我在 Equal GetHashCode 方法中写错了什么?

例如:

  1. 我是一个在数据库中有标题的博客实体
  2. 客户端连接到iis
    1. 获取包含{“Id”:1,“Name”:“blogName”}
    2. 的json字符串
    3. 反序列化并将其存储在本地
    4. 以同样的方式将博客添加到博客中,以及我使用客户端的类博客中的可观察集合
  3. 某人或某物更改数据库中的博客名称
  4. 客户端尝试刷新
    1. 获取包含{“Id”:1,“Name”:“newBlogName”}
    2. 的json字符串
    3. 将其反序列化为类blog的新实例,具有相同的ID
  5. 下一步是什么?将新实例名称复制到旧实例名称,有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

是的,你期望太多了。您可以附加新实体(因为实体框架上下文不知道该实体,因为您从dbcontext之外的某处获取它)然后保存它。

回答here

//This place is where you can deserialize your entity
var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" };

using (var context = new BloggingContext())
{
    context.Blogs.Attach(existingBlog);

    // Do some more work... 

    context.SaveChanges();
}

答案 1 :(得分:0)

我认为最好的解决方案是拥有两个数据库一个服务器端和一个客户端,具有相同的共享实体框架但具有不同的连接字符串,json.net设置了保持对象引用并仅使用网络来同步数据库然后在客户端查询。