使用 EF 使用单独的函数保存上下文中的所有更改

Using EF to save all changes in the context with a separate function

我注意到在这个 EntityFramework 示例中,每个函数都有自己的 using 语句和 DbContext。

我的存储库有点不同,其中 DbContext 使用依赖注入发送并设置为私有 属性。

创建一个名为 SaveAll 的函数是否正常,如下所示:

public bool SaveAll()
{
    return _context.SaveChanges() > 0;
}

然后在我的存储库中有一些函数从不 _context.SaveChanges 而只是将项目添加到上下文中。最后只需调用 _repository.SaveAll() 即可一次性保存所有内容。

另一方面

有些函数像这样内置了保存是否正常(在你需要立即return创建对象的新ID的情况下:

public Product AddProduct(Product product)
{
    _context.Add(product);
    _context.SaveChanges();

    return product;
}

根据需要,我的项目中似乎有各种各样的功能,我只是想确保这是常见的,或者看看是否有更好的方法来处理这些情况。

存储库函数:
-那只会增加上下文
- 添加到上下文然后保存上下文

没有正常...但是,如果您处理 Web 请求,那么 "normal" 通常会指示该请求的单个上下文实例,但在此之前需要对数据库进行的任何操作都需要他们自己专用的 DbContext.. 事实上,您有一些方法可以添加到上下文并立即保存,这会给您带来麻烦,因为您正在共享该上下文。正如我之前所说,恕我直言,任何自行保存所有内容并可被视为原子操作的方法都应该在该函数中创建和销毁自己的 DbContext。

因此将您的原子操作更改为:

public Product AddProduct(Product product)
{
  using( var context = new DbContext() )
  {
    context.Add(product);
    context.SaveChanges();
  }

   return product;
}