Sto utilizzando Entity Framework in un'applicazione Web che utilizza SQL server 2000, 2005 e 2008. Quando creo un nuovo file EDMX utilizzando qualcosa di diverso da 2008 (versione del primo edmx creato) Ricevo error 0172: All SSDL artifacts must target the same provider. The Provider 'MyDatabase' is different from ' MyDatabase ' that was encountered earlier.
Sembra che da qualche parte nel codice la connessione sia collegata a un datastore 2008 e quando controlla il file SSDL e vede un valore ProviderManifestToken diverso, genera questo errore. Sono un po 'più che frustrato. È difficile immaginare che EF funzioni solo con una singola versione di Sql Server per applicazione. Sono abbastanza sicuro che ci deve essere un'impostazione o una soluzione alternativa. Qualcuno ha una soluzione per utilizzare diverse versioni di SQL Server e Entity Framework all'interno di una singola applicazione web?Più versioni di SQL Server che utilizzano Entity Framework in una singola applicazione ASP.NET
risposta
Sono stato in grado di realizzare questo mettendo ogni edmx
in un assembly separato. Poi nella stringa di connessione, sostituire tutti i res://*/...
con res://NameOfAssembly/...
posso anche eseguire join tra i due modelli di entità (contrariamente alle affermazioni che ho trovato in altre fonti), ad esempio:
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
};
Vedo dove funzionerebbe. Il problema che stavo osservando era perché non funzionava nel mio ambiente. L'unica soluzione in questo momento era impostare tutti ProviderManifestToken sulla stessa versione. Da allora ho migrato tutti i dbs a MSSQL 2008. Quindi, perché questo potrebbe non rispondere alla mia domanda originale, è una soluzione accettabile. –
Ho avuto lo stesso problema. Poi ho implementato tutto quanto descritto nel suggerimento '@Cogwheel - Matthew Orlando' e funziona perfettamente per entrambi i server sql 2005 e 2008. Nota: avevo creato un nuovo progetto per l'accesso ai dati di SQL 2008 con nome diff e quindi copiato tutto il contenuto dal primo e corretto 'ProviderManifestToken' per la corrispondente versione di sql e quindi sostituita namespace nel secondo progetto - secondo il nuovo nome dell'assembly (non so se fosse necessario). E ora sono felice. – mastak
Qualche idea su come procedere mentre usi il codice per primo? –
Questo link mi ha aiutato per risolvere il problema quando c'era una differenza in SQL Server 2005 e 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/
Fare clic con il pulsante destro del mouse sul file .edmx e selezionare Apri con XML Editor. Aprire Entity Framework edmx di file:
Modificare il ProviderManifestToken al 2008:
Sembra proprio un problema noto per Microsoft.
Grazie amico. Ho davvero faticato con questo. Un altro sviluppatore ha continuato ad aggiungere al nostro progetto un diverso previdente. Buon articolo –
Quello che ho trovato nel mio caso era che avevamo 3 progetti in una soluzione, e abbiamo cambiato ProviderManifestToken in uno dei progetti A, e questo non mi permetteva di eseguire il progetto B dalla stessa soluzione. – franklins
Nel mio caso ho dovuto modificare 2008 tot 2012 e nella parte inferiore del file si trova:
- 1. Entity Framework e SQL Server 2012 Paging
- 2. Compatibilità con le versioni precedenti di SQL Server in Entity Framework?
- 3. Entity Framework per l'interrogazione di stringhe JSON in SQL Server
- 4. Entity Framework 6 e sequenze SQL Server
- 5. Entity Framework e SQL Server Tuning Advisor
- 6. Debug di Entity Framework Istruzioni SQL
- 7. Dynamic Entity Framework query SQL
- 8. Come selezionare una singola colonna con Entity Framework?
- 9. SQL Caching ed Entity Framework
- 10. Cercapersone con Entity Framework 7 e SQL Server 2008
- 11. Crittografia SQL Server 2008 R2 - con Entity Framework
- 12. Query che utilizzano i caratteri jolly LIKE nel server sql
- 13. Più progetti ASP.NET MVC che vengono creati come applicazione ASP.NET MVC singola
- 14. Entity Framework 5 - Implementazione di SQL Server "Esegui come utente"
- 15. Stessa applicazione, diversi database: Entity framework 6.X + MySQL + SQL Server
- 16. In che modo Entity Framework gestisce gli schemi di SQL Server?
- 17. ASP.NET MVC 3 Applicazione che utilizza Ninject, Entity Framework 4 Code-First CTP 5, Pattern
- 18. Entity Framework con Sql Server Crittografia livello colonna
- 19. Versioning API con Web API ASP.NET e Entity Framework
- 20. ASP.net vNext e Entity Framework 6
- 21. Come eseguire più comandi SQL in una singola connessione SQL?
- 22. Come configurare Entity Framework/SQL Server con Mono
- 23. Colonna DataCreated o Modified - Entity Framework o utilizzo di trigger su SQL Server
- 24. più istruzioni SQL in QSqlQuery che utilizzano il driver sqlite3
- 25. Can Entity Framework può generare un'istruzione UPDATE ... WHERE in SQL?
- 26. Entity Framework 6 con SQL Server 2012 fornisce System.Data.Entity.Core.ProviderIncompatibleException
- 27. 2 chiamate o una singola chiamata al server sql
- 28. Più join in query Entity Framework
- 29. Più istruzioni di aggiornamento SQL in una singola query
- 30. MemCached vs Redis per ASP.NET e Entity framework?
Un elemento importante da ricordare è che sono nel mezzo di una migrazione da sql 2000 a sql 2008 e ho modificato le stringhe di connessione ed eseguito un "aggiornamento del modello dal database" abbastanza stranamente se modifico tutto il SSDL in usa ProviderManifestToken = "2005" l'app funziona. –
Sto cercando anche una risposta a questo problema. Gli unici risultati di google rilevanti che ho trovato finora non entrano in profondità. – Cogwheel