Construí un modelo de marco de entidad contra una base de datos de 2008. Todo funciona bien contra la base de datos de 2008. Cuando intento actualizar la entidad en una base de datos de 2005, aparece este error.
La versión de SQL Server en uso no admite el tipo de datos 'datetime2
Específicamente, no usé ninguna característica de 2008 cuando construí la base de datos. No puedo encontrar ninguna referencia a datetime2 en el código. Y sí, la columna está definida como "fecha y hora" en la base de datos.
fuente
Vista rápida de la línea:
fuente
Esto es muy frustrante y me sorprende que MS haya decidido no hacerlo para poder apuntar a una determinada versión de SQL. Para asegurarme de que estamos apuntando a 2005, escribí una aplicación de consola simple y la llamé en un paso PreBuild.
El paso previo a la compilación se ve así:
El código está aquí:
fuente
Usando la práctica aplicación de consola de @ Vance anterior, usé lo siguiente como un evento BeforeBuild
Esto es muy útil, ya que evita la molesta redistribución. Gracias por compartir Vance.
Agregué TF.exe a la carpeta de la solución de la biblioteca y esto ayuda, ya que ahora puedo verificar los archivos edmx antes de intentar editarlos, como parte de la compilación. También agregué esto con condiciones, de modo que se establezca en 2005 para implementaciones en el servidor y en 2008 para las configuraciones sln de la máquina Dev. También para mencionar que debe agregar los archivos SetEdmxSqlVersion.exe (y .pdb) reales a la carpeta de la biblioteca (o en cualquier otro lugar donde desee mantener estos bits).
Muchas gracias @Vance. Realmente ordenado, ahorra mucho tiempo y mantiene mis compilaciones totalmente automatizadas y sin dolor :)
fuente
Tuve un problema similar con 2012 vs. 2008. Se puede resolver con un evento BeforeBuild usando XmlPeek y XmlPoke:
Si no le gusta el reemplazo automático, simplemente puede reemplazar la tarea XmlPoke con una tarea Error.
fuente
CallTarget
tareas de destino condicionales previas a la compilación según las configuraciones de publicación / compilación. (EG solo cambia cuando se implementa en un entorno sql2005)Para el beneficio de las personas que se encuentran con el mismo problema pero que usan Code First , consulte mi respuesta aquí sobre cómo cambiar
ProviderManifestToken
en Code First. Implica crear unDbModelBuilder
manual y pasar unaDbProviderInfo
instancia (con el token apropiado) al llamar alBuild
método del generador de modelos .fuente
Type System Version=SQL Server 2005
cadena de conexión establecida también puede funcionarUna mejor solución para mí es, en lugar de editar manualmente el archivo EDMX, simplemente abrir edmx en el modo de diseño y en el menú contextual "Actualizar modelo desde la base de datos ...". Tienes que apuntar a la versión correcta de SQL, por supuesto, sea lo que sea para ti.
fuente
Tuvimos este error en SQL2005 v.3, donde no lo teníamos en SQL2005 v.4.
Agregar SQL2005 a la cadena de conexión solucionó nuestro problema específico.
Aún no hemos identificado por qué y no queríamos modificar el código para proporcionar el token como se resolvió anteriormente (problema manifestado durante la implementación).
fuente