EF 4.0 — Save создает дубликаты в ТЕСТОВОЙ среде, но не в DEV

#asp.net-mvc-3 #entity-framework

#asp.net-mvc-3 #entity-framework

Вопрос:

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ Если вы смотрите на этот вопрос, пожалуйста, ознакомьтесь с ответом, который я опубликовал ниже. Первоначальная проблема была не с EF, а с моей реализацией jQuery.

РЕДАКТИРОВАТЬ: я подтвердил, что это происходит только в IE (в частности, IE 7). Я не вижу такого же поведения в Chrome. Я еще не тестировал Firefox, но мы не поддерживаем FF в нашей среде, поэтому я не так беспокоюсь об этом.)

Прежде чем я опубликую кучу кода, я просто хотел опубликовать это, чтобы узнать, сталкивался ли кто-нибудь еще с чем-то подобным, и если да, то в чем их виновник.

У меня есть код в проекте MVC, который создает новую сущность. Код работает так, как ожидалось, в моей локальной среде. Однако, когда я отправляю код в нашу среду тестового сервера, тот же код создает две записи при сохранении.

Я проверил, что схемы базы данных идентичны, поэтому я устранил это как возможную причину.

Кто-нибудь еще когда-либо испытывал что-то подобное? Если да, что вы сделали, чтобы устранить проблему?

Спасибо

Комментарии:

1. Нет, у меня нет. Можете ли вы опубликовать код, в котором вы сохраняете? Вы уверены, что отправляете тот же код на тестовый сервер? Локально какую БД вы используете? Как насчет на тестовом сервере?

2. Я подтвердил, что код выталкивается правильно. Я использую SQL Server 2008 как локально, так и в тестовой среде. Базы данных физически расположены на двух разных серверах, но схемы идентичны. Я только что узнал, что дублирование происходит только в IE.

3. Я только что запустил Fiddler и подтвердил, что IE отправляет один и тот же POST-запрос дважды! ДОХ!! <facepalm>

4. Не могли бы вы опубликовать свою модель представления и javascript (если есть)?

Ответ №1:

Я, наконец, отследил проблему до ошибки в некотором javascript. Проблема не имела ничего общего с Entity Framework или MVC. У меня есть некоторый код jQuery, который помогает мне добавлять значки к кнопкам отправки, а в IE это приводило к тому, что отправка выполнялась дважды.

На случай, если кому-то интересно, вот оскорбительный код:

 $('input[type="submit"]').each(function () {
    $(this).hide().after('<button>').next().button({
        icons: { primary: $(this).attr('icon') },
        label: $(this).val()
    }).click(function (event) {
        event.preventDefault();
        $(this).prev().click();
        return false;
    });
});
  

Это не вызвало проблем в Chrome, но в IE кнопки отправки запускались дважды. Чтобы исправить это, я добавил onclick=»return false;» к моим тегам ввода, и проблема исчезла.