C# 在实体核心中调用存储过程时,是否创建新的DbContext或使用注入的DbContext?

C# 在实体核心中调用存储过程时,是否创建新的DbContext或使用注入的DbContext?,c#,asp.net,entity-framework-core,dbcontext,C#,Asp.net,Entity Framework Core,Dbcontext,在EntityCore中执行存储过程(使用ADO方法)的正确方法是什么 我应该使用注入的dbcontext还是创建一个新的dbcontext public class ContactController { private readonly MyDbContext _context; public ContactController(MyDbContext context) { _context = context; } publi

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

我应该使用注入的dbcontext还是创建一个新的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())
            {
                //...
            }
         }

    }
}

不应该有任何理由不使用注射的

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

例如:

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

查看和上的这些EF Core文档。

使用注入的文档,而不是创建新文档。好处:您可以在SaveChanges上使用相同的事务,同时对保留请求工作单元的上下文进行其他修改。