Существуют ли недостатки в обходе DBSet при вызове Find, Add, Update et c. в контексте? - PullRequest
0 голосов
/ 29 апреля 2020

Существуют ли недостатки в обходе DBSet при вызове Find, Add, Update et c. в контексте?

создание или получение DBSet должно стоить некоторого времени. И, насколько мне известно, методы Add, Update, Remove устанавливают EntityState объекта только на Added, Modified, Deleted и больше ничего не делают. Реальное действие будет выполнено при вызове SaveChanges (Asyn c). Таким образом, остается вопрос: хорошо ли по возможности опускать DbSet? см. первые примеры.

вызов

dbContext.Find(typeof(TEntity), id);
dbContext.Add(entity);
dbContext.Update(entity);
dbContext.Remove(entity);
...

вместо

dbContext.Set<TEntity>.Find(id);
dbContext.Set<TEntity>.Add(entity);
dbContext.Set<TEntity>.Update(entity);
dbContext.Set<TEntity>.Remove(entity);

1 Ответ

1 голос
/ 29 апреля 2020

Последующие вызовы метода Set<TEntity> дешевы из-за кэширования результатов. Первый вызов также не такой дорогой по сравнению со всеми издержками EF.

Set<TEntity> возвращает InternalDbSet<TEntity>, чьи Add, Update, et c просто перенаправляют вызовы в контекст набора.

В результате нет существенных различий.

Для справки см .:
https://github.com/dotnet/efcore/blob/master/src/EFCore/DbContext.cs https://github.com/dotnet/efcore/blob/master/src/EFCore/Internal/InternalDbSet.cs

...