gpt4 book ai didi

ravendb - 在 RavenDB 中更新现有文档时调用 _documentSession.Store 有什么缺点吗?

转载 作者:行者123 更新时间:2023-12-04 17:23:31 24 4
gpt4 key购买 nike

在 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;
}

我团队中的某个人正在使用另一种方法来创建新文档或更新现有文档:
public string Save(Blogpost post)
{
_documentSession.Store(post);
_documentSession.SaveChanges();
return post.Id;
}

总是打电话 .Store()有什么坏处吗?即使文档已经存在?

最佳答案

如果您正在开发富客户端应用程序并序列化完整的 博文 像这样对客户:

//GET BlogPost/1
public BlogPost Get(int id)
{
return _documentSession.Load<BlogPost>(id)
}

然后再水化一个完整的 博文 用户进行更改后在服务器上。下面的代码似乎比先加载然后存储更有效:
//POST BlogPost/
public void Post(BlogPost post)
{
//blog post already has an Id in this example
_documentSession.Store(post)
_documentSession.SaveChanges();
}

当你做一个
documentSession.Load<Blogpost>(id)

RavenDB 返回您已经拥有的博客文章的完整 JSON 以供您覆盖它,转身并重新保存将博客文章的完整 JSON 通过网络再次发送回 Raven。

这意味着在您已经拥有所有数据的情况下执行加载和存储会导致到 Raven 的网络流量增加一倍,而我在使用 Fiddler 时不会看到任何额外的好处。

即使您只更改了对象的一部分(例如 BlogPost 的名称),RavenDB .NET API 在执行以下操作时仍会通过网络发送完整对象:
  • 加载()
  • 进行一些更改(但不是对所有内容进行更改)
  • 商店()
  • SaveChanges()

  • 也许 Ayende Rahien 可以启发我们了解我在这里遗漏的任何内容?

    关于ravendb - 在 RavenDB 中更新现有文档时调用 _documentSession.Store 有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669770/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com