2009-06-30 6 views
11

Ich verwende das Entity Framework in einer Webanwendung, die SQL Server 2000, 2005 und 2008 verwendet. Wenn ich eine neue EDMX-Datei mit einem anderen als erstellen 2008 (Version der ersten edmx erstellt) Ich erhalte error 0172: All SSDL artifacts must target the same provider. The Provider 'MyDatabase' is different from ' MyDatabase ' that was encountered earlier. Es scheint, dass irgendwo im Code die Verbindung mit einem 2008 Datenspeicher verdrahtet ist und wenn es die SSDL-Datei überprüft und einen anderen ProviderManifestToken-Wert sieht, wird dieser Fehler ausgelöst. Ich bin etwas mehr als frustriert. Es ist schwer vorstellbar, dass EF nur mit einer einzigen Version von Sql Server pro Anwendung arbeiten wird. Ich bin ziemlich sicher, dass es eine Einstellung oder einen Workaround geben muss. Hat jemand eine Lösung, um verschiedene Versionen von SQL Server und Entity Framework in einer einzigen Webanwendung zu verwenden?Mehrere Versionen von SQL Server mit Entity Framework in einer einzigen ASP.NET-Anwendung

+0

Ein Punkt von Bedeutung zu erwähnen ist, dass ich in der Mitte einer Migration von SQL 2000 nach SQL 2008 bin und die Verbindungszeichenfolgen geändert habe und ein "Update Model From Database" seltsam genug durchgeführt, wenn ich alle SSDL ändern benutze ProviderManifestToken = "2005" die App funktioniert. –

+0

Ich suche auch eine Antwort auf dieses Problem. Die einzigen relevanten Google-Ergebnisse, die ich bisher gefunden habe, gehen nicht in die Tiefe. – Cogwheel

Antwort

24

Ich konnte dies erreichen, indem ich jedes edmx in einer separaten Versammlung setzte. Dann in der Verbindungszeichenfolge ersetzt all res://*/... mit res://NameOfAssembly/...

ich auch Verbindungen zwischen den beiden Unternehmen Modellen durchführen kann (im Gegensatz zu Ansprüchen in anderen Quellen gefunden), zB:

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

Ich sehe, wo das funktionieren würde. Das Problem, das ich anschaute, war, warum es in meiner Umgebung nicht funktionierte. Die einzige Umgehung zu der Zeit war, alle ProviderManifestToken auf die gleiche Version zu setzen. Seit dieser Zeit habe ich alle dbs zu MSSQL 2008 migriert. Warum dies meine ursprüngliche Frage nicht beantworten kann, ist es eine akzeptable Problemumgehung. –

+0

Ich hatte das gleiche Problem. Dann habe ich alle in '@Cogwheel - Matthew Orlando' vorgeschlagenen implementiert und es funktioniert perfekt für beide sql Server 2005 und 2008. Hinweis: Ich hatte ein neues Projekt für den Datenzugriff auf SQL 2008 mit diff name erstellt und dann den gesamten Inhalt von vorne kopiert und 'ProviderManifestToken' für die entsprechende sql-Version repariert und dann Namespaces im zweiten Projekt ersetzt - entsprechend dem neuen Assemblynamen (weiß nicht, ob es notwendig war). Und jetzt bin ich glücklich. – mastak

+0

Irgendwelche Gedanken darüber, wie man das macht, während man zuerst den Code benutzt? –

5

Dieser Link hat mir geholfen Um das Problem zu lösen, gab es einen Unterschied in SQL Server 2005 und 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/

Klicken Sie mit der rechten Maustaste auf die EDMX-Datei und wählen Sie Öffnen mit XML-Editor. Öffnen Entity Framework .edmx Datei:

Ändern der ProviderManifestToken bis 2008:

Sieht aus wie es ist ein bekanntes Problem für Microsoft.

+0

Danke Mann. Ich habe wirklich mit diesem gekämpft. Ein anderer Entwickler hat unser Projekt mit einem anderen Anbieter erweitert. Guter Artikel –

+0

Was ich in meinem Fall fand, war, wir hatten 3 Projekte in einer Lösung, und wir haben das ProviderManifestToken in einem der Projekt A geändert, und dies ließ mich nicht sogar Projekt B von der gleichen Lösung ausführen. – franklins

+0

In meinem Fall musste ich 2008 bis 2012 ändern und am Ende der Datei finden Sie: . Ändern Sie das in False und es hat funktioniert. – Martin

Verwandte Themen