在Entity Core中調用存儲過程時,創建一個新的DbContext或使用注入的DbContext?

asp.net c# dbcontext entity-framework-core

在Entity Core中執行存儲過程(使用ADO方法)的正確方法是什麼?

我應該使用注入的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();

請參閱有關Raw SQL無跟踪的這些EF Core文檔。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因