2009-06-30 21 views
11

SQL Server 2000, 2005 ve 2008 kullanan bir Web uygulamasında varlık çerçevesini kullanıyorum. Başka bir şeyi kullanarak yeni bir EDMX dosyası oluştururken 2008 (yaratılan ilk edmx sürümü) error 0172: All SSDL artifacts must target the same provider. The Provider 'MyDatabase' is different from ' MyDatabase ' that was encountered earlier. alırsınız Kodun bir yerinde bağlantı bir 2008 veri deposuna bağlanır ve SSDL dosyasını kontrol edip farklı bir ProviderManifestToken değeri görürse bu hatayı atar. Ben hayal kırıklığından biraz daha fazlasıyım. EF'nin uygulama başına sadece Sql Server'ın tek bir sürümü ile çalışacağını düşünmek zor. Bir ayar veya geçici çözüm olması gerektiğinden eminim. Herkesin tek bir web uygulamasında farklı SQL Server sürümlerini ve Entity Framework'ü kullanması için bir çözümü var mı?Tek bir ASP.NET uygulamasında varlık çerçevesini kullanarak SQL Server'ın birden çok sürümü

+0

SQL 2000'den sql'e 2008 geçişi için bir geçişin ortasında olduğumu ve bağlantı dizelerini değiştirdiğimi ve tüm SSDL'yi değiştirdiğimde bir "Veritabanından Güncelleştirme Modeli" gerçekleştirme olasılığım var. Uygulama çalışır ProviderManifestToken = "2005" kullanın. –

+0

Ben de bu soruna bir cevap arıyorum. Şimdiye kadar bulduğum tek alakalı google sonuçları, herhangi bir derinliğe girmiyor. – Cogwheel

cevap

24

Bunu, her bir edmx'u ayrı bir kuruluma yerleştirerek başarabiliyorum.

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

Bunun nerede işe yaradığını görüyorum. Baktığım konu, neden çevremde çalışmıyordu. O zamandaki tek çalışma, tüm ProviderManifestToken'i aynı sürüme ayarlamaktı. Bu zamandan beri tüm dbs'leri MSSQL 2008'e taşıdım. Bu yüzden neden bu orijinal soruma cevap vermiyor olabilir, bu kabul edilebilir bir çözümdür. –

+0

Aynı sorunu yaşadım. Daha sonra '@Cogwheel - Matthew Orlando' önerisinde anlatılanları uyguladı ve 2005 ve 2008'in her iki sql sunucusu için de mükemmel çalışıyor. Not: SQL 2008'e diff adına sahip veri erişimi için yeni bir proje hazırladım ve daha sonra tüm içeriği önce kopyaladım. ve ilgili sql sürümü için 'ProviderManifestToken' ve daha sonra ikinci projede ad alanlarını değiştirdi - yeni derleme adına göre (gerekli olup olmadığını bilmiyorum). Ve şimdi mutluyum. – mastak

+0

İlk önce kodu kullanırken nasıl bir düşünce var? –

5

Bu bağlantı bana yardımcı: Sonra bağlantı dizesinde, tüm Hatta (iddialarının aksine ben diğer kaynaklarda bulundu) iki varlık modelleri arasında katılır gerçekleştirebilirsiniz res://*/...

res://NameOfAssembly/... ile, örneğin değiştirmek SQL Server 2005 ve 2008'de bir sorun olduğunda sorunu çözmek için. 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/

.edmx dosyasına sağ tıklayın ve XML Editor ile Aç'ı seçin. Açık Varlık Framework .edmx dosyası:

Değişim 2008 ProviderManifestToken:

Microsoft için onun bilinen bir sorun gibi görünüyor.

+0

Teşekkürler adamım. Bununla gerçekten uğraştım. Başka bir geliştirici projemize farklı bir sağlayıcı ile eklemeye devam etti. İyi makale –

+0

Benim durumumda bulduğum şey, tek bir çözümde 3 projemiz vardı ve A projesinden birinde ProviderManifestToken'i değiştirdik ve bu, B projesini bile aynı çözümden çalıştırmama izin vermedi. – franklins

+0

Benim durumumda, 2008 tot 2012'yi ve bulduğunuz dosyanın en altını değiştirmem gerekiyordu: . Bunu Yanlış olarak değiştirin ve işe yaradı. – Martin

İlgili konular