LINQ to Entities создает запрос, содержащий datetime2 в SQL 2005 Express - PullRequest
5 голосов
/ 28 июля 2010

У меня есть приложение LINQ to Entities и проект базы данных для управления схемой в решении VS 2010, предназначенном для .NET 4.0. Модель сущностей в настоящее время обратно проектируется из базы данных. Одна из таблиц определяется столбцом типа datetime. Проект базы данных настроен на использование режима совместимости SQL Server 2005, поэтому все развертывается в порядке.

Я только что столкнулся с проблемой, когда оператор обновления через структуру сущностей, похоже, использует datetime2, а не datetime, что вызывает исключение, поскольку SQL 2005 не поддерживает этот тип данных:

System.Data.UpdateException: An error occurred while updating the entries. 
See the inner exception for details. ---> System.ArgumentException: The version 
of SQL Server in use does not support datatype 'datetime2'.

Из трассировки стека видно, что ошибка, по-видимому, происходит внутри:

System.Data.Mapping.Update.DynamicUpdateCommand

Я просмотрел весь свой код SQL и код сущности и подтвердил, что ссылок на datetime2 не существует (включая файл dbschema). Я могу только заключить, что тип данных генерируется в динамическом запросе SQL, сгенерированном структурой сущностей.

Как я могу подтвердить или опровергнуть это, и как я могу предотвратить это? Платформа Entity не знает, что я попросил проект db нацелиться на режим совместимости 2005 года, и я не вижу способа указать ему версию, на которую он смотрит. Что бы это ни стоило, я создал этот проект на машине, на которой был установлен 2008 Express, но я периодически переключаюсь на другую машину, которая не (и пока не может обновить).

1 Ответ

13 голосов
/ 28 июля 2010

Вам нужно изменить ProviderManifestToken внутри вашего EDMX на значение 2005. Возможно, вы сгенерировали свою БД по сравнению с БД 2008.Сделайте это изменение, и EF прекратит использовать синтаксис 2008 года.

...