0

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

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

例如:

  1. 我在数据库中有一个带有标题的博客实体
  2. 客户端连接到 iis
    1. 获取一个包含 {"Id" : 1, "Name" : "blogName"} 的 json 字符串
    2. 反序列化并存储在本地
    3. 以与我使用客户端的类博客中的可观察集合相同的方式将帖子添加到博客
  3. 某人或某事 更改数据库中的博客名称
  4. 客户端尝试刷新
    1. 获取包含 {"Id" : 1, "Name" : "newBlogName"} 的 json 字符串
    2. 将其反序列化为具有相同 id 的类 blog 的新实例

下一步是什么?将新实例名称复制到旧实例名称,或者有更好的方法吗?

4

2 回答 2

0

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

在这里回答

//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();
}
于 2013-07-17T10:39:52.577 回答
0

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

于 2013-11-18T02:06:09.997 回答