2009-06-30 13 views
11

Estoy usando Entity Framework en una aplicación web que utiliza SQL Server 2000, 2005 y 2008. Cuando creo un nuevo archivo EDMX usando cualquier cosa que no sea 2008 (versión del primer edmx creado) Recibo error 0172: All SSDL artifacts must target the same provider. The Provider 'MyDatabase' is different from ' MyDatabase ' that was encountered earlier. Parece que en algún lugar del código la conexión está conectada a un almacén de datos 2008 y cuando comprueba el archivo SSDL y ve un valor ProviderManifestToken diferente arroja este error. Estoy un poco más que frustrado. Es difícil imaginar que EF solo funcione con una sola versión de Sql Server por aplicación. Estoy bastante seguro de que debe haber una configuración o solución alternativa. ¿Alguien tiene una solución para usar diferentes versiones de SQL Server y Entity Framework dentro de una sola aplicación web?Versiones múltiples de SQL Server utilizando Entity Framework en una sola aplicación ASP.NET

+0

Un elemento de importancia para mencionar es que estoy en medio de una migración de sql 2000 a sql 2008 y he cambiado las cadenas de conexión y realicé un "Actualizar modelo de base de datos" bastante extraño si modifico todo el SSDL use ProviderManifestToken = "2005" la aplicación funciona. –

+0

Estoy buscando una respuesta a este problema también. Los únicos resultados relevantes de google que he encontrado hasta ahora no entran en profundidad. – Cogwheel

Respuesta

24

Pude lograr esto colocando cada edmx en un conjunto por separado. Luego, en la cadena de conexión, reemplace todo el res://*/... con res://NameOfAssembly/...

incluso puedo realizar combinaciones entre los dos modelos de entidad (contrariamente a las afirmaciones que he encontrado en otras fuentes), por ejemplo:

var oneDb = new Entities2000(); 
var otherDb = new Entities2005(); 

var results = from one in oneDb.SomeSet 
       join other in otherDb.OtherSet 
        on one.Property equals other.Property 
       select new { 
        SomeProp = one.SomeProp, 
        OtherProp = other.OtherProp 
       }; 
+0

Veo dónde funcionaría esto. El problema que estaba viendo era por qué no funcionaba en mi entorno. La única solución en ese momento fue configurar todos los ProviderManifestToken a la misma versión. Desde esta vez he migrado todos los dbs a MSSQL 2008. Entonces, ¿por qué esto puede no responder a mi pregunta original? Es una solución aceptable. –

+0

Tuve el mismo problema. Luego implementé todo lo descrito en la sugerencia '@Cogwheel - Matthew Orlando' y funciona perfecto para ambos servidores sql 2005 y 2008. Nota: Hice un nuevo proyecto para acceso a datos a SQL 2008 con nombre diff y luego copié todo el contenido desde el primero y fijó 'ProviderManifestToken' para la versión sql correspondiente y luego reemplazó los espacios de nombres en el segundo proyecto, de acuerdo con el nuevo nombre del ensamblado (no sé si era necesario). Y ahora estoy feliz. – mastak

+0

¿Alguna idea sobre cómo hacer esto al usar el código primero? –

5

Este enlace me ayudó para resolver el problema cuando había una diferencia en SQL Server 2005 y 2008. http://kkryczka.wordpress.com/2011/01/03/all-ssdl-artifacts-must-target-the-same-provider-the-providermanifesttoken-2008-is-different-from-2005-that-was-encountered-earlier/

Haga clic con el botón derecho en el archivo .edmx y seleccione Abrir con XML Editor. Abrir el archivo Entity Framework .edmx:

Cambiar el ProviderManifestToken a 2008:

Parece que es un problema conocido de Microsoft.

+0

Gracias hombre. Realmente luché con esto. Otro desarrollador siguió agregando a nuestro proyecto con un proveedor diferente. Buen artículo –

+0

Lo que encontré en mi caso fue que teníamos 3 proyectos en una solución, y hemos cambiado ProviderManifestToken en uno de los proyectos A, y esto no me permitió ejecutar incluso el proyecto B desde la misma solución. – franklins

+0

En mi caso tuve que cambiar 2008 tot 2012 y en la parte inferior del archivo se encuentra: . Cambie eso a False y funcionó. – Martin

Cuestiones relacionadas