В последнее время я много читаю об асинхронной платформе Entity Framework, и я ищу правильный способ изменить свои репозитории на асинхронные версии. Теперь они выглядят более или менее следующим образом:Правильный способ реализации репозитория async Entity Framework
public class MyRepo
{
private DbContext _context;
public MyRepo()
{
_context = new DbContext();
}
public int DoSomeStuff(int id)
{
var item = _context.MyModels.Where(x => x.Id == id).SingleOrDefault();
item.MyProperty = "abcd";
return _context.SaveChanges();
}
}
Пример вызова этого хранилищу:
var myRepo = new MyRepo();
myRepo.DoSomeStuff(1);
myRepo.DoSomeStuff(2);
Могу ли я просто изменить функцию DoSomeStuff
на:
public async Task<int> DoSomeStuffAsync(int id)
{
var item = await _context.MyModels.Where(x => x.Id == id).SingleOrDefaultAsync();
item.MyProperty = "abcd";
return await _context.SaveChangesAsync();
}
или это неправильно способ обработки экземпляра DbContext
, а должен ли он быть:
public async Task<int> DoSomeStuffAsync(int id)
{
using(var db = new DbContext())
{
// ...
}
}
'new DbContext()' [Почему вы выделяете новые объекты, такие как крестьянин] (http://en.wikipedia.org/wiki/Dependency_injection)? –
Это всего лишь пример, я не принимал DI во внимание, так как это, вероятно, мой следующий вопрос об асинхронных репозиториях :) – Marthijn