Eu construí um modelo de estrutura de entidade em um banco de dados de 2008. Tudo funciona bem no banco de dados de 2008. Quando tento atualizar a entidade em um banco de dados de 2005, recebo este erro.
A versão do SQL Server em uso não oferece suporte ao tipo de dados 'datetime2
Especificamente, não usei nenhum recurso de 2008 quando criei o banco de dados. Não consigo encontrar nenhuma referência a datetime2 no código. E, sim, a coluna é definida como "data e hora" no banco de dados.
fonte
Visão rápida da linha:
fonte
Isso é muito frustrante e estou surpreso que a MS tenha decidido não fazer isso para que você pudesse ter como alvo uma determinada versão do SQL. Para ter certeza de que estamos visando 2005, escrevi um aplicativo de console simples e chamei-o em uma etapa de Pré-construção.
A etapa de pré-construção se parece com isto:
O código está aqui:
fonte
Usando o prático aplicativo de console de @Vance acima, usei o seguinte como um evento BeforeBuild
Isso é muito útil, pois evita reimplementação irritante. Obrigado por compartilhar Vance.
Adicionei TF.exe à pasta da solução da Biblioteca e isso ajuda, pois agora posso verificar os arquivos edmx antes de tentar editá-los, como parte da construção. Além disso, acrescentei isso com condições, de modo que seja definido como 2005 para implantações no servidor e de volta para 2008 para as configurações de sln da máquina Dev. Além disso, para mencionar que você precisa adicionar o (s) arquivo (s) SetEdmxSqlVersion.exe (e .pdb) à pasta Biblioteca (ou onde mais você quiser manter esses bits).
Muito obrigado @Vance. Muito legal, grande economia de tempo e mantém minhas compilações totalmente automatizadas e sem dor :)
fonte
Tive um problema semelhante com 2012 vs. 2008. Ele pode ser resolvido com um evento BeforeBuild usando XmlPeek e XmlPoke:
Se você não gosta da substituição automatizada, pode simplesmente substituir a tarefa XmlPoke por uma tarefa Erro.
fonte
CallTarget
tarefas de destino de pré-construção condicional, dependendo das configurações de publicação / construção. (EG só muda ao implantar em um ambiente sql2005)Para o benefício de pessoas que encontram o mesmo problema, mas estão usando o Code First , verifique minha resposta aqui sobre como alterar o
ProviderManifestToken
no Code First. Envolve criarDbModelBuilder
manualmente e passar umaDbProviderInfo
instância (com o token apropriado) ao chamar oBuild
método do construtor de modelo .fonte
Type System Version=SQL Server 2005
na string de conexão também pode funcionarA melhor solução para mim é em vez de editar manualmente o arquivo EDMX, basta abrir o edmx no modo de design e no menu de contexto "Atualizar modelo do banco de dados ...". Você tem que apontar para a versão correta do SQL, é claro, seja lá o que for isso para você.
fonte
Tivemos esse erro no SQL2005 v.3, onde não o tínhamos no SQL2005 v.4.
Adicionar SQL2005 à string de conexão corrigiu nosso problema específico.
Ainda não identificamos o porquê e não queremos modificar o código para fornecer o token conforme resolvido acima (problema manifestado durante a implantação).
fonte