Метод AddObject() очень медленный
У меня странная проблема, когда я пытаюсь использовать ObjectSet(TEntity).AddObject() для добавления нового объекта, он очень медленный по сравнению с обычным поведением, это занимает около 500 мс, и это происходит только один раз, и я уверен, что инструкция, которая занимает некоторое время, является AddObject, а не SaveChanges.
Код очень прост
ObjectEntity obj = businessObj.ExtractEntityObj();
context.ObjectTable.AddObject(ObjectEntity);
Я делаю некоторую работу с ObjectContext прежде, чем вызвать эту часть кода, но это не намного больше, чем то, что я делаю во всех других операциях. Кажется, это зависит от того, сколько элементов с одинаковым внешним ключом хранится в базе данных, я знаю это может звучать странно, но это единственная переменная, которая влияет на производительность этой же инструкции. Я также заметил, что если я попробую это на новом DataContext, производительность вернется к норме (несколько миллисекунд), но из-за архитектурной проблемы у меня не будет нового DataContext каждый раз, когда мне нужно что-то выполнить.
Может ли кто-нибудь помочь мне? Спасибо
2 ответа
Я решил свою проблему, может быть, кому-то может помочь, это было из-за простого запроса, который я делал перед этой инструкцией, вот этой:
int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID
Я до сих пор не знаю, почему, но эта инструкция присоединяет все данные "ObjectTable" к контексту, делая его очень медленным, "ObjectTable" также является той же таблицей, в которую я добавлял новую сущность.Установка ObjectQuery MergeOption на NoTracking Я решил проблему
до свидания
Изменить ваш запрос
int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID
в
int id = context.ObjectTable.FirstOrDefault(t=>t.Something = somethingElse).ID
Не должно быть значительного улучшения производительности, но зачем использовать Where()
а потом FirsOrDefault()
,