Обновление столбцов с помощью внешнего ключа в Entity Framework занимает более 1 минуты - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь обновить объект, у которого есть несколько столбцов с внешними ключами. Кажется, все работает нормально, но при первом назначении это занимает более 1 минуты, но если я снова выполню то же действие, оно наступит немедленно.

Фрагмент кода:

 public bool UpdateStatus(DetailDataModel DetailDataModel)
    {
        Details updateStatus = (from d in UnitOfWork.Details
                           where d.Id == DetailDataModel.Id
                           select d).FirstOrDefault();
        updateStatus.StatusId = DetailDataModel.StatusId;
        UnitOfWork.Commit();
        return true;
    }

Ниже приведена линия виновника:

updateStatus.StatusId = updateStatus.StatusId;

Я не могу найти проблему, но при попытке обновить другие столбцы того же объекта, он работает нормально, и проблема только с столбцами Foreignkey. Существуют ли какие-либо ограничения для связи со структурой Entity.

Пожалуйста, поделитесь своими мыслями об этом, заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Я предполагаю, что вы используете POCO T4 Generator и у вас включена отложенная загрузка, потому что в этом случае задержка может быть легко объяснена - методы исправления в сгенерированных классах POCO вызовут отложенную загрузку объекта Status и, в свою очередь,отложенная загрузка всех связанных с ней деталей.

Если вам не нужна отложенная загрузка для этой операции, попробуйте отключить ее в вашем контексте, в противном случае вам придется удалить циклическую ссылку из вашей модели сущности (Status не будетиметь свойство навигации для Details) или изменить шаблон T4 и удалить эти вызовы исправления.

0 голосов
/ 24 февраля 2012

Отключение отложенной загрузки для objectContext работает так, как будто это просто оператор Update для одного столбца, поэтому ускоренная загрузка не требуется, код ниже работает:

UnitOfWork.EnableLazyLoading = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...