Можно ли программно установить ProviderManifestToken для модели EF с первым кодом? - PullRequest
3 голосов
/ 14 января 2012

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

Однако экземпляры базы данных представляют собой смесь SQL Server 2005 и 2008. (Я довольноуверен, что это корень проблемы, которую мы видим.)

На определенной странице мы начали видеть следующую ошибку:

Версия SQL Serverиспользуется не поддерживает тип данных datetime2.

Из Google и StackOverflowing я пришел к выводу, что это, вероятно, из-за неправильно настроенного ProviderManifestToken на DbContext.

Однако ошибка носит эпизодический характер.Основываясь на производственных журналах ошибок, я могу просматривать тот же клиент, для которого произошла ошибка, и выполнять те же операции CRUD, не получая ошибку.

Я в растерянности.

Это дажеможно программно установить ProviderManifestToken?Или, может быть, фабрика соединений по умолчанию не устанавливает ее должным образом (и я могу кое-что сделать, чтобы помочь ей в этом)?Или я далеко от базы?Есть идеи?

Кстати ...

Сущность, в которой происходит ошибка, имеет 2 datetime столбцов, оба из которых могут быть обнуляемыми (ипоследняя ошибка содержала null и 13 января 2012 г. в качестве значений для этих полей, поэтому я вполне уверен, что этот ответ о том, что значения находятся в диапазоне datetime, неприменяются.

Ответы [ 2 ]

0 голосов
/ 19 августа 2015

Спасибо, что опубликовали это. У меня была та же проблема с консольным приложением, которое посещало базу данных SQL2008, чем с базой данных SQL2005, и у меня была та же проблема. Я переключил его так, что сначала он пошел SQL2005, чем SQL2008, и проблема ушла. Я также сначала использую код EF.

0 голосов
/ 27 января 2012

Ну, пока нет решения. Но мы нашли обходной путь на данный момент.

Если мы перезапустим пул приложений, а затем сразу же перейдем на панель мониторинга клиента для клиента, поддерживаемого в 2008 году, EF сгенерирует и кеширует сопоставление на основе ограничений SQL Server 2008, и все панели, поддерживаемые в 2008 году, будут работать нормально, но панели, поддерживаемые в 2005 году сбой при записи с ошибкой datetime2.

Однако, если мы перезапустим пул приложений, а затем сразу же посетим панель мониторинга клиента 2005 года, EF сгенерирует и кеширует сопоставление на основе ограничений SQL Server 2005 (что позволяет модели работать как с экземплярами базы данных 2005, так и 2008 года). .

Так что, по сути, наш процесс публикации теперь имеет дополнительный шаг - немедленное посещение информационной панели, поддерживаемой 2005 годом.

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