Я заметил, что в этом примере EntityFramework каждая функция имеет свой собственный оператор using с DbContext.Использование EF для сохранения всех изменений в контексте с помощью отдельной функции
Мой репозиторий немного отличается от того, где DbContext отправляется с использованием инъекции зависимостей и устанавливается как частное свойство.
Это нормально, чтобы создать функцию, называемую SaveAll, которая выглядит следующим образом:
public bool SaveAll()
{
return _context.SaveChanges() > 0;
}
И тогда есть некоторые функции в моем хранилище, что никогда не _context.SaveChanges и вместо того, чтобы просто добавить элементы в контексте. Затем, наконец, просто вызовите _repository.SaveAll(), чтобы сохранить все все одним выстрелом.
С другой стороны
Является ли это нормальным иметь некоторые функции, которые имеют сбережение встроены прямо в них, как это (в ситуации, когда вам нужно немедленно вернуть новый идентификатор созданного объекта:
public Product AddProduct(Product product)
{
_context.Add(product);
_context.SaveChanges();
return product;
}
Похоже, у меня есть целый ряд функций, в течение моего проекта на основе потребностей, и я просто хочу, чтобы убедиться, что это является общим или увидеть, если есть лучший способ справиться с этими сценариями.
Repository функции:
-Вот только добавить к контексту
-Вот добавить в контекст, а затем сохранить контекст
Любой подход может быть действительным в зависимости от смыслового значения, что делает функциональность. Если 'AddProduct' предназначен для атомной операции с побочными эффектами, то он может самостоятельно сохранить изменения. В противном случае потребительский код всегда должен был сохранить изменения сразу же после этого, что нежелательно и может не всегда выполняться. С другой стороны, если он предназначен для частичного набора операций в одной транзакции, то вызов 'SaveChanges()' несколько раз в течение такой транзакции может быть проблематичным. – David
Итак, как вы думаете, что удалением с помощью функции SaveChanges(), которую я создал, и всегда вызывающей SaveChanges() в каждой отдельной функции, является мой лучший выбор? –
Совсем нет. Я говорю, что это своего рода основанный на мнениях и будет зависеть от семантических и архитектурных проблем, не выявленных в вопросе. – David