Entity Framework с MySQL - время ожидания истекло при создании модели

Я создал базу данных в MySQL, и я пытаюсь сопоставить ее с Entity Framework, но я начинаю работать в "GenerateSSDLException", когда я пытаюсь добавить более 20 таблиц в контекст EF.

Исключение типа 'Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine + GenerateSSDLException' при попытке обновления из базы данных. Исключение сообщение: "Произошла ошибка во время выполнение определения команды. Видеть внутреннее исключение для деталей.

Неустранимая ошибка при выполнении команды.

Время ожидания истекло. Период ожидания истекает до завершения операции или сервер не отвечает.

Нет ничего особенного в затронутых таблицах, и это никогда не та же таблица (ы), это просто, что после добавления определенного (неспецифического) количества таблиц контекст больше не может обновляться без истечения "Истекло время ожидания", ошибка. Иногда это осталось только один стол, а иногда и три; результаты довольно непредсказуемы. Кроме того, разница в количестве таблиц, которые могут быть добавлены до ошибки, указывает мне, что, возможно, проблема заключается в размере генерируемого запроса для обновления контекста, который включает как существующие определения таблиц, так и новые таблицы, которые добавляются к нему. По сути, SQL-запрос становится слишком большим, и по какой-то причине он не выполняется.

Если я сгенерирую модель с EdmGen2, она работает без каких-либо ошибок, но сгенерированный файл EDMX не может быть обновлен в Visual Studio без создания вышеупомянутое исключение.

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

Одно предложение, предложенное коллегой, поддерживало два отдельных файла EBMX с некоторым кроссовером таблицы, но это похоже на довольно уродливое исправление, на мой взгляд. Полагаю, это то, что я получаю от попыток использовать "новую технологию".: (

Ответ 1

У меня просто была головная боль по этой проблеме в течение всего дня. Тем не менее, я нашел решение, которое вы можете просто добавить в app.config или web.config, где ваше соединение EDP desinger существует как "Default Time Time = 300000;". Проблема исчезла.

Ответ 2

Вышеуказанный совет неверен.

Default Command Timeout - единственный параметр строки подключения, который необходимо изменить. Connect Time просто регулирует количество времени ожидания, чтобы получить соединение в первую очередь; это не ваша проблема.

Default Command Timeout, похоже, не влияет на строку подключения с помощью Connector/Net 6.3.4. Я думаю, что это ошибка в Connector/Net, и я подал сообщение об ошибке с Oracle. EDIT: эта ошибка была признана разработчиками MySql и исправлена ​​по состоянию на 10/13/2010. Исправления были помещены в 6.0.8, 6.1.6, 6.2.5 и 6.3.5.

Единственный способ, которым я обходился, состоял в том, чтобы изменить свой объект ObjectContext object CommandTimeout на нечто, отличное от нуля. Если он равен нулю, он должен использовать значение в "базовом провайдере" для MSDN. Если значение не равно null, это значение, определяющее значение количества секунд перед таймаутом.

Например:

var context = new CitationData.de_rawEntities();
context.CommandTimeout = 180;

Ответ 3

Отъезд:

http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/

Ой, просто понял, что эта ссылка уже отправлена! извините

Я также решительно рассмотрю "Одно предложение, предложенное коллегой, состояло в том, чтобы поддерживать два отдельных файла EBMX с некоторым кроссовером таблицы"

Это может быть уродливо, но это должно сработать!

Ответ 4

Вы, ребята, слабы, не объясняя, как легко решить проблему:

  • Удалить все ваши подключения к данным
  • Загрузите последнюю версию MySql Connector (6.3.x)
  • Откройте Visual Studio > Sever Explorer > Щелкните правой кнопкой мыши "Соединения данных" > Добавить соединение
  • Выберите поставщика базы данных MySQL
  • Введите сведения о подключении
  • Нажмите "Advance"
  • Найдите время подключения и сделайте что-то вроде 30 000
  • Найти время ожидания команды по умолчанию и сделать что-то вроде 30 000

Сохраните все, а затем повторите попытку и обновите свою модель EF. Я тестировал это с помощью EF 4.0 и Vs2010, поэтому я знаю, что он работает.

Ответ 5

Я попробовал все вышеперечисленное решение безрезультатно. Я загрузил последний .NET-коннектор для MySQL (6.3.6), и проблема исчезла.

Ответ 6

Попробуйте dotConnect для MySQL с Entity Developer,

Мы внесли некоторые улучшения в процесс создания модели в наших инструментах. Вы можете добавить Devart Entity Model в свой проект, который похож на модель ADO.NET Entity Framework, но имеет некоторые улучшения и не имеет проблемы с таймаутом.

Ответ 7

Две возможности spring:

Во-первых, это EF версия 1 (которая поставляется с .NET 3.5 SP 1). См. this и this.

Другим является то, что это похоже на те же симптомы, что и у SQL Server и pre-ODBC-драйверов (около 1991 года), где использовался неправильный тип вызова: один вид используется с запросами, возвращающими результаты (select), а другой для операторов - не возвращает результат (create table). В конечном итоге соединение стало безнадежно несинхронизированным, пытаясь сопоставить результаты SELECT с соответствующим запросом. (В те дни синего экрана смерти не было: компьютер обычно перезагружался добровольно.)

Интересно, запутан ли инструмент в режиме соединения во множестве выполняемых операций: создание таблиц, проверка созданной структуры, добавление нового столбца, заполнение строк и проверка или проверка содержимого строки после заполнения. Если это причина, то это может быть предотвращено путем "более чистого" порядка последовательности: ничего не делать, кроме полной таблицы, создается одна за другой, т.е. Ничего не делать, что приведет к созданию таблицы, а затем alter table добавьте новые столбцы.