c# - 在 Entity Core 中调用存储过程时创建新的 DbContext 还是使用注入(inject)的 DbContext?

标签 c# asp.net entity-framework-core dbcontext

在 Entity Core 中执行存储过程(使用 ADO 方法)的正确方法是什么?

我应该使用注入(inject)的 dbcontext 还是创建一个新的?

public class ContactController
{
    private readonly MyDbContext _context;


    public ContactController(MyDbContext context)
    {
        _context = context;
    }


    public IActionResult Search(ContactSearchModel csm, int page)
    {
        //execute using the injected _context?
        using (var command = _context.Database.GetDbConnection().CreateCommand())
        {
            //...
        }

        //or create a new context?
        using (var newContext = new MyDbContext())
        {
            using (var command = newContext.Database.GetDbConnection().CreateCommand())
            {
                //...
            }
         }

    }
}

最佳答案

没有任何理由不使用注入(inject)的。

如果您问这个问题只是因为您只是读取数据并希望它很快,并且您担心跟踪或其他什么问题,那么您应该在调用时调用 .AsNoTracking()您的存储过程的数据库。

一个例子:

var users = _context.Users
    .FromSql("EXECUTE dbo.MyUserStoredProc")
    .AsNoTracking()
    .ToList();

请参阅 Raw SQL 上的这些 EF Core 文档和 No Tracking .

关于c# - 在 Entity Core 中调用存储过程时创建新的 DbContext 还是使用注入(inject)的 DbContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41964842/

相关文章:

c# - DateTime.ParseExact 返回 FormatException

c# - 图像 mask 滤镜

c# - 如何将字符串数组转换为 C# 中的类型

asp.net-core - Entity Framework 核心 : Scaffolding to Avoid Data Loss after to change Model/Entity

entity-framework - EF 核心 Iqueryable<T>。 Count() 返回的数字不同于 Iqueryable<TO> .ToList().Count()。这甚至可能还是一个错误?

c# - 我如何提示 C# 8.0 可空引用系统使用反射初始化属性

c# - 当用户尝试打开相同版本的新实例时,如何返回到已打开的应用程序?

c# - 为什么 itween 动画似乎比声明花费更多时间并防止延迟 Destroy()

c# - 动态控制无法正常工作

javascript - 如何从用户控件更新控件的 ID