Есть ли у кого-нибудь полезная информация об использовании метода .SaveChanges ()?
У меня возникают различные проблемы при попытке использовать метод .SaveChanges () в моем объекте контекста данных. Я беру данные из существующего источника данных, создаю соответствующие объекты EntityFramework / DataService, заполняю эти созданные объекты данными, добавляю эти объекты в контекст и затем сохраняю эти данные, вызывая .SaveChanges.
Сценарии, которые я придумал (и проблемы, связанные с ними), таковы ... В каждом сценарии у меня есть цикл foreach, который берет данные из строк в DataTable и генерирует объекты, присоединяя их к контекст, как они идут. (примечание: три объекта «член» и два «адреса», которые присоединяются с помощью вызова SetLink) - в основном это инструмент преобразования, который берет данные из одного хранилища данных и объединяет их в хранилище данных, предоставляемое службами данных.
- Вызовите .SaveChanges () без параметров один раз в конце цикла foreach (т. Е. Вне цикла)
- Ошибка OutOfMemory примерно на 1/3 пути (30 000 из 90 000 сохранений) - не уверен, как это происходит, хотя, поскольку каждый элемент сохранения представляет собой отдельный SQL-запрос к базе данных, для чего не хватает памяти?
- Вызов .SaveChanges () без параметров один раз за цикл
- Это работает, но абсолютно безвозвратно (8 часов на 90 000 сохранений)
- Вызовите .SaveChanges (SaveChangesOption.Batch) один раз в конце цикла foreach.
- Та же ошибка OutOfMemory, но без сохранения в базу данных
- Вызов .SaveChanges (SaveChangesOption.Batch) один раз за цикл
- Вызов .SaveChanges (SaveChangesOption.Batch) один раз в 10 циклов
- 400 Ошибка неверного запроса (иногда)
- OutOfMemory после нескольких итераций
- Число случайных попыток создать контекст один раз за цикл, или иметь его в качестве переменной в начале цикла, или иметь доступную переменную-член.
- Разные результаты, не в состоянии количественно оценить, ни один действительно не хороший
Каков предпочтительный метод вызова .SaveChanges () из клиентского объекта при такой большой загрузке данных? Есть ли что-то, что я не понимаю о том, как .SaveChanges () работает? Может ли кто-нибудь предоставить более подробную информацию о том, как однажды следует использовать эту функцию и каковы (если таковые имеются) ограничения для сохранения данных через службы данных? Есть ли лучшие рекомендации по вызову метода .SaveChanges ()? Есть ли особенно хорошая документация по вызову метода .SaveChanges ()?