Мы используем Generic шаблон Repo, который я вижу некоторые голоса называет его антипаттерн, но лучше, чтобы начать что-то потом сидеть и ждать, пока все, чтобы закончить :-)SaveChanges Vs Асинхронный в EntityFramework
Senario 1
var placeStatus = await _placeService.AddAsync(oPlace, false); // here false just add to context and don't hit Savechanges
var orgStatus = await _organizationService.AddAsync(oOrganization, false);
_unitOfWork.SaveChanges();
Vs
Task<short> placeStatus = _placeService.AddAsync(oPlace, true);
Task<short> orgStatus = _organizationService.AddAsync(oOrganization, true);
await Task.WhenAll(placeTask, orgTask);
С моим ограниченным знанием я предполагаю, что SaveChanges() сохраняет откатить внутренний в первом случае, тогда как мне придется обрабатывать откат во втором случае. Я также предполагаю, что параллельное выполнение от await Task.WhenAll
1) так что SaveChanges() параллельно? или перформанс, чем второй, если атомарность не проблема или проблема, и я на правильном пути, если я делаю второй?
Senario 2
Task<Place> placeTask= _placeCore.SelectByIdAsync(id);
Task<Organization> organizationTask = _organizationCore.SelectByIdAsync(id);
await Task.WhenAll(placeTask, organizationTask);
2) Могу ли я пропустить объединения (который может нарушить всю концепцию общего репо) в родовой шаблон репо с использованием Await, как на Senario 2.
Любые ссылки, книги ссылка или история была бы полезна
Благодаря
ли версия с WhenAll работы на практике? Я думаю, что вы не можете запускать два запроса параллельно в одном EF DataContext, но я могу ошибаться. – Stilgar
@Stilgar Это не помогло, только когда я отлаживал медленное разрешение datacontext для запуска в последовательном порядке :-) – brykneval
Ну, тогда вы просто не можете этого сделать (по крайней мере, не с одним EF DataContext) – Stilgar