Метод 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(),

Другие вопросы по тегам