gpt4 book ai didi

c# - 为什么要在存储库中包含 Repo.SaveChanges() 方法?

转载 作者:行者123 更新时间:2023-11-30 13:59:04 29 4
gpt4 key购买 nike

我正在与另一位开发人员讨论是否要在我们的 Entity Framework 5 存储库中公开一个 repo.SaveChanges() 方法。

我们正在考虑有一个像这样自动保存更改的 repo(快速和肮脏的例子):

public class Repo {
private OurEfContext _context = new OurEfContext();

public void PersistCustomer(Customer cust)
{
// update customer code here
_context.SaveChanges(); // <-- is this okay?
}
}

我们正在考虑的另一个选择是公开一个单独的 Repo.PersistChanges() 方法,如下所示:

public class Repo {
private OurEfContext _context = new OurEfContext();

public void PersistCustomer(Customer cust)
{
// update customer code here
// no call to _context.SaveChanges();
}

public void PersistChanges()
{
_context.SaveChanges();
}
}

我见过的大多数示例都使用第二种模式。一种模式比另一种模式更“正确”吗?

最佳答案

在每次更改后保存会阻止您保存成批的实体。在某些图形结构中,这可能是一个正确性问题,在其他情况下,它只会增加 CPU 负载。 SaveChanges 的成本不仅仅是写入,还包括遍历加载到上下文中的实体。

为什么反对 Entity Framework ?执行它要您执行的操作:保存批处理并在对实体进行所有更改后最后调用 SaveChanges

PersistCustomer 方法的命名有误:它保留所有内容,而不仅仅是客户。您不能使用 EF 保留单个实体。您的抽象(存储库)已损坏。

人们经常将 EF 包装在一个不添加任何功能但删除功能的通用存储库中。这对我来说从来没有意义。

关于c# - 为什么要在存储库中包含 Repo.SaveChanges() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14389858/

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