Использование SQL Server 2008 и SQL Server 2005 и дата и время

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

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

Я специально не использовал какие-либо функции 2008 года при создании базы данных. Я не могу найти ссылку на datetime2 в коде. И, да, столбец определяется как «дата /время» в базе данных.

117 голосов | спросил Monroecheeseman 25 22008vEurope/Moscow11bEurope/MoscowTue, 25 Nov 2008 08:15:35 +0300 2008, 08:15:35

6 ответов


0

Быстрый гугл указывает мне на то, что выглядит как sql-2005 /" rel =" noreferrer "> решение .

Откройте EDMX в редакторе файлов (или «откройте с помощью…» в Visual Studio и выберите «Редактор XML»). Вверху вы найдете модель хранилища, у которой есть атрибут ProviderManifestToken. Это должно иметь значение 2008. Измените его на 2005, перекомпилируйте и все работает.

ПРИМЕЧАНИЕ. Это необходимо делать каждый раз, когда вы обновляете модель из базы данных.

ответил Richard Harrison 25 22008vEurope/Moscow11bEurope/MoscowTue, 25 Nov 2008 09:31:11 +0300 2008, 09:31:11
0

Быстрый просмотр строки:

<Schema Namespace="Foobar.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" >
ответил Jason 6 FebruaryEurope/MoscowbSat, 06 Feb 2010 02:46:29 +0300000000amSat, 06 Feb 2010 02:46:29 +030010 2010, 02:46:29
0

Используя удобное консольное приложение @ Vance выше, я использовал следующее в качестве события BeforeBuild

<Target Name="BeforeBuild">
    <!--Check out BD.edmx, Another.edmx, all configs-->
    <Exec Command="$(SolutionDir)\Library\tf checkout /lock:none $(ProjectDir)Generation\DB.edmx" />
    <Exec Command="$(SolutionDir)\Library\tf checkout /lock:none $(ProjectDir)Generation\Another.edmx" />
    <!--Set to 2008 for Dev-->
    <Exec Condition=" '$(Configuration)' == 'DEV1' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2008" />
    <Exec Condition=" '$(Configuration)' == 'DEV1' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2008" />
    <Exec Condition=" '$(Configuration)' == 'DEV2' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2008" />
    <Exec Condition=" '$(Configuration)' == 'DEV2' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2008" />
    <!--Set to 2005 for Deployments-->
    <Exec Condition=" '$(Configuration)' == 'TEST' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2005" />
    <Exec Condition=" '$(Configuration)' == 'TEST' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2005" />
    <Exec Condition=" '$(Configuration)' == 'PRODUCTION' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\DB.edmx 2005" />
    <Exec Condition=" '$(Configuration)' == 'PRODUCTION' " Command="$(SolutionDir)Library\SetEdmxSqlVersion $(ProjectDir)Generation\Another.edmx 2005" />
  </Target>

Это очень удобно, так как позволяет избежать назойливого перераспределения. Спасибо, что поделились Vance.

Я добавил TF.exe в папку решения библиотеки, и это помогает, поскольку теперь я могу проверить файлы edmx, прежде чем пытаться редактировать их, как часть сборки. Кроме того, я добавил это с условиями, чтобы он был установлен на 2005 для развертываний на сервер и обратно на 2008 для конфигураций SL-машины Dev. Также стоит упомянуть, что вам нужно добавить фактические файлы SetEdmxSqlVersion.exe (и .pdb) в папку «Библиотека» (или где бы вы ни хотели сохранить эти биты).

Большое спасибо @Vance. Действительно аккуратный, экономит время и делает мои сборки полностью автоматизированными и безболезненными :)

ответил MemeDeveloper 29 MaramThu, 29 Mar 2012 00:07:24 +04002012-03-29T00:07:24+04:0012 2012, 00:07:24
0

В интересах людей, которые сталкиваются с той же проблемой, но используют Code First , ознакомьтесь с моим ответом здесь о том, как изменить ProviderManifestToken в Code First. Это включает создание DbModelBuilder вручную и передачу DbProviderInfo

ответил sinelaw 21 PM000000100000002731 2012, 22:22:27
0

Была похожая проблема с 2012 по 2008 год. Ее можно решить с помощью события BeforeBuild, используя XmlPeek и XmlPoke:

    <Target Name="BeforeBuild">
      <XmlPeek XmlInputPath="$(ProjectDir)MyModel.edmx"
               Namespaces="&lt;Namespace Prefix='edmx' Uri='http://schemas.microsoft.com/ado/2009/11/edmx'/&gt;&lt;Namespace Prefix='ssdl' Uri='http://schemas.microsoft.com/ado/2009/11/edm/ssdl'/&gt;"
               Query="/edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/@ProviderManifestToken">
         <Output TaskParameter="Result" ItemName="TargetedSQLVersion" />
      </XmlPeek>

      <XmlPoke Condition="@(TargetedSQLVersion) != 2008"
               XmlInputPath="$(ProjectDir)MyModel.edmx"
               Namespaces="&lt;Namespace Prefix='edmx' Uri='http://schemas.microsoft.com/ado/2009/11/edmx'/&gt;&lt;Namespace Prefix='ssdl' Uri='http://schemas.microsoft.com/ado/2009/11/edm/ssdl'/&gt;"
               Query="/edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema/@ProviderManifestToken"
               Value="2008">
      </XmlPoke>
   </Target>

Если вам не нравится автоматическая замена, вы можете просто заменить задачу XmlPoke на задачу Error.

ответил Edgar 8 MarpmTue, 08 Mar 2016 15:10:51 +03002016-03-08T15:10:51+03:0003 2016, 15:10:51
0

Эта ошибка возникла в SQL2005 v.3, а в SQL2005 v.4 ее не было.

Добавление SQL2005 в строку подключения решило нашу конкретную проблему.

Мы еще не определили, почему, и не хотели изменять код для предоставления токена, как было решено выше (проблема проявлялась во время развертывания).

ответил Brian H 5 FebruaryEurope/MoscowbMon, 05 Feb 2018 21:12:01 +0300000000pmMon, 05 Feb 2018 21:12:01 +030018 2018, 21:12:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132