在RavenDB中创建新文档或更新现有文档时,文档说按照以下方式执行:
public string Save(Blogpost post)
{
Blogpost model;
if (String.IsNullOrEmpty(post.Id))
{
model = new Blogpost();
_documentSession.Store(model);
}
else
{
model = _documentSession.Load<Blogpost>(post.SimpleId);
}
model.Text = template.Text;
model.Name = template.Name;
_documentSession.SaveChanges();
return model.Id;
}
Run Code Online (Sandbox Code Playgroud)
我的团队中的某个人正在以另一种方式为创建新文档或更新现有文档进行保存:
public string Save(Blogpost post)
{
_documentSession.Store(post);
_documentSession.SaveChanges();
return post.Id;
}
Run Code Online (Sandbox Code Playgroud)
.Store()即使文件已经存在,总是打电话有什么不利吗?
Jason,你的代码总是会覆盖文档。这是你想做的事吗?
如果你正在做一个富客户端应用程序并将完整的BlogPost序列化到客户端,如下所示:
//GET BlogPost/1
public BlogPost Get(int id)
{
return _documentSession.Load<BlogPost>(id)
}
Run Code Online (Sandbox Code Playgroud)
然后在用户进行更改后在服务器上重新编写完整的BlogPost.以下代码似乎比执行加载然后存储更有效:
//POST BlogPost/
public void Post(BlogPost post)
{
//blog post already has an Id in this example
_documentSession.Store(post)
_documentSession.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
当你这样做的时候
documentSession.Load<Blogpost>(id)
Run Code Online (Sandbox Code Playgroud)
RavenDB为您已经拥有的博客帖子返回完整的JSON,以便覆盖它,转过身并重新保存,通过网络向Raven发送完整的博客文章JSON.
这意味着当您已经拥有所有数据时进行加载和存储会导致Raven的网络流量增加一倍,而使用Fiddler无法获得额外的好处.
即使您只是更改了对象的一部分(比如BlogPost的名称),RavenDB .NET API在执行以下操作时仍会通过网络发送完整对象:
也许Ayende Rahien可以在我错过的任何事情上启发我们吗?