qua*_*els 3 c# entity-framework repository-pattern
我正在与另一个开发人员讨论是否repo.SaveChanges()在我们的Entity Framework 5存储库中公开了一个方法.
我们正在考虑拥有一个可以自动保存此类更改的仓库(快速而肮脏的示例):
public class Repo {
private OurEfContext _context = new OurEfContext();
public void PersistCustomer(Customer cust)
{
// update customer code here
_context.SaveChanges(); // <-- is this okay?
}
}
Run Code Online (Sandbox Code Playgroud)
我们正在考虑的另一个选择是公开一个单独的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();
}
}
Run Code Online (Sandbox Code Playgroud)
我见过的大多数例子都使用第二种模式.一种模式比另一种更"正确"吗?
每次更改后保存都会阻止您保存批量实体.在某些图形结构中,这可能是正确性问题,在其他情况下,它只会驱动CPU负载.成本SaveChanges不仅仅是写作,还包括遍历加载到上下文中的实体.
为什么要反对实体框架?做,它想要你做什么:保存批次并SaveChanges在完成对实体的所有更改后调用.
该方法PersistCustomer错误命名:它坚持一切,而不仅仅是客户.您无法使用EF保留单个实体.您的抽象(存储库)已损坏.
人们经常将EF包装在通用存储库中,该存储库不添加任何功能但删除功能 这从来没有对我有意义.
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |