EF: Изменить ProviderManifestToken или изменить тип данных? - PullRequest
1 голос
/ 04 октября 2011

Два вопроса с последующими подробностями:

  1. Какие еще побочные эффекты возникают, когда я меняю свой ProviderManifestToken на "2005"?
  2. Разумно ли менять схему в базе данных с datetime на datetime2? Например, если я оставлю свой ProviderManifestToken как «2008», и кто-то позже попытается сгенерировать схему базы данных из модели EDMX, будет ли он использовать datetime2 тип данных для этих столбцов при их создании?

подробности:

VS2010 SP1
.NET 4
EF 4
SQL Server 2008

У меня нет практического опыта работы с Entity Framework, и я неожиданно поддерживаю кодовую базу, которая его использует. Кодовая база хрупкая, в сжатые сроки, и еще не до конца понятна теми, кто остается.

Solution Explorer показывает файл EDMX, который сопоставляется с существующей схемой в нашей базе данных DEV. Я не знаю, какая (модель или база данных) появилась первой.

Операция фиксации завершается с ошибкой:

Преобразование типа данных datetime2 в тип данных datetime привело к значению вне допустимого диапазона.

Когда я смотрю на типы данных моих столбцов даты / времени в моем экземпляре SQL Server 2008, они все datetime, а не datetime2.

Когда я смотрю на XML файла EDMX, я вижу этот атрибут элемента схемы:

ProviderManifestToken = "2008"

Я предполагаю, что где-то в моем .NET-коде есть значение DateTime, значение которого выходит за пределы диапазона datetime типа данных SQL Server 2008. Из прочитанного я понял, что изменение ProviderManifestToken в EDMX на «2005» не позволит EF пытаться использовать тип datetime2 во время этих коммитов.

Вот моя проблема: я не знаю, что еще об этой кодовой базе или месте EF изменится, если я изменю это с 2008 на 2005, и у меня есть предубеждение против перехода назад с технологией, когда это не является абсолютно необходимым .

1 Ответ

1 голос
/ 04 октября 2011

Есть некоторые вещи, которые действительно перестали бы функционировать, если изменить ProviderManifestToken на 2005. В частности, запросы LINQ, которые используют функции, связанные с типом времени SQL 2008. Лично у меня не было проблемы с заменой токена на 2005 (даже для отдельных сред в разных средах) ... но это не то, что нужно воспринимать легкомысленно. Вам нужно будет тщательно протестировать все запросы в вашем приложении.

Что касается схемы, сгенерированной edmx в обратном направлении - это определяется шаблоном генерации SQL, связанным с вашим edmx, а не самим ProviderManifestToken.

...