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()
のDBを呼び出すときに.AsNoTracking()
を呼び出す必要があります。
例:
var users = _context.Users
.FromSql("EXECUTE dbo.MyUserStoredProc")
.AsNoTracking()
.ToList();