C# 在实体核心中调用存储过程时,是否创建新的DbContext或使用注入的DbContext?
在EntityCore中执行存储过程(使用ADO方法)的正确方法是什么 我应该使用注入的dbcontext还是创建一个新的dbcontextC# 在实体核心中调用存储过程时,是否创建新的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
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上使用相同的事务,同时对保留请求工作单元的上下文进行其他修改。