Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Совет №3. Массовое обновление данных с помощью DetectChanges
DbContext.Configuration.ValidateOnSaveEnabled, но это может привести к соответствующим результатам, поэтому этим стоит пользоваться, только если проверка данных была предварительно произведена. var dbContext = new AppDbContext();using:using (var dbContext = new AppDbContext()){
...
}
foreach).Include).public Person[] FindPeople(PersonFilter filter)
{
using(var dbContext = new AppDbContext())
{
var query = dbContext.People;
if(filter.Age != null)
query = query.Where(p=>p.Age == filter.Age);
//Остальная фильтрация
...
return query.ToArray();
}
}
var query = dbContext.People.AsQuerable();
public class Repository<T> {
IList<T> LoadAllMatching<TOrderBy>(Expression<Func<T, bool>> whereCondition, Expression<Func<T, TOrderBy>> orderBy, bool desc);
} var query = GetQuery<T>().Where(whereCondition);
query = desc ? query.OrderByDescending(orderBy) : query.OrderBy(orderBy);Зачем вам тогда репозиторй вообще?
— у вас появляются похожие запросы в разных частях приложения. Приходится все равно делать что-то типа репозитория, чтобы избежать дублирования кода
— вы начинаете сохранять данные через DbContext.SaveChanges() в куче мест вашего приложения. Затем возникают сложные ситуации, где надо использовать транзакции, хранимые процедуры, определенную последовательность сохранения и т.п. Вам приходится все равно выносить всю эту логику из клиентского кода в репозиторий.
— вы понимаете, что EF — вообще отстой, делает очень неэффективные запросы, ест кучу памяти, при сохранении выдает вам какие-то странные и непонятные exception-ы и вообще начинает вас выводить из себя. А оказывается, что на него всё завязано и чтобы это переделать, надо переписать и ЗАНОВО ПРОТЕСТИРОВАТЬ 70% приложения. Вот тут вы начинаете по другому делать СЛЕДУЮЩЕЕ приложение :)
Entity Framework Code First на практике