0

У меня странная проблема, когда я пытаюсь использовать ObjectSet (TEntity) .AddObject(), чтобы добавить новую Entity, она очень медленная по сравнению с обычным поведением, она занимает около 500 мс, и это происходит только в одном случае, и я уверен, что инструкция, которая занимает некоторое время, это AddObject, а не SaveChanges.Метод AddObject() очень медленный

Код очень простой

ObjectEntity obj = businessObj.ExtractEntityObj(); 
    context.ObjectTable.AddObject(ObjectEntity); 

я сделать некоторую работу в ObjectContext перед назвать эту часть кода, но это не намного больше, чем то, что я во всех других операциях, кажется, что оно зависит от того, сколько элементов с таким же внешним ключом хранится в базе данных. Я знаю, что это может звучать странно, но это единственная переменная, которая меняет производительность этой же инструкции. Я также заметил, что если я попробую это в новом DataContext, производительность вернется к нормальному (несколько миллисекунд), но для архитектурной проблемы я не могу иметь новый DataContext каждый раз, когда мне приходится что-то делать.

Не мог бы кто-нибудь мне помочь? Благодаря

+1

Необходимо предоставить более подробную информацию. Это похоже на: * У меня есть один частный случай, когда это происходит, но я ничего вам не расскажу об этом случае. Почему это происходит? * –

+0

Как сказано, трудно сказать, не зная больше. Но даже тогда я чувствую сессию профилирования производительности, и это то, что вам нужно сделать самому. –

ответ

1

я решил мою проблему, возможно, мог бы быть полезным для кого-то, это было связано с простого запроса я делал до этого инструкции, это один:

int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID 

Я до сих пор не знаю, почему, но эта инструкция присоединяет все данные «ObjectTable» к контексту, что делает его очень медленным, «ObjectTable» также является той же таблицей, в которой я добавлял новый объект. Установка ObjectQuery MergeOption в NoTracking я решил проблему

Bye

0

Изменить ваш запрос

int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID 

в

int id = context.ObjectTable.FirstOrDefault(t=>t.Something = somethingElse).ID 

Это should't существенного повышения производительности но зачем использовать Where(), а затем FirsOrDefault().

Смежные вопросы