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

本文关键字:上下文 函数 EF 单独 使用 保存 | 更新日期: 2023-09-27 18:36:14

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

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

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

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

然后在我的存储库中有一些永远不会_context的功能。保存更改,而只是将项目添加到上下文中。最后就打电话给_repository了。SaveAll() 一次性保存所有内容。

另一方面

像这样将保存内置到其中的一些函数是否正常(在您需要立即返回所创建对象的新 Id 的情况下:

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

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

存储库功能:
-这只会增加上下文
-添加到上下文,然后保存上下文

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

没有

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

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

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