Entity Framework Schema specified is not valid hatası çözümü
Projelerinizde Entity Framework (EF) ü kullanıyorsanız, aşağıdaki hata mesajını alma olasılığınız her zaman için vardır.
İşin enteresan tarafı, bu hatayı derleme anında ya da projenizi çalıştırdıktan hemen sonra almıyorsunuz. Arada sırada karşınıza çıkıyor, sonra kendiliğinden düzeliyor, sonra yine karşınıza çıkıyor. 

Server Error in '/' Application. -------------------------------------------------------------------------------- Schema specified is not valid. Errors: MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl(4,9) : error 0169: All SSDL artifacts must target the same provider. The ProviderManifestToken '5' is different from '5.1' that was encountered earlier. MySql.Data.Entity.Properties.SchemaDefinition-5.1.ssdl(4,9) : error 0169: All SSDL artifacts must target the same provider. The ProviderManifestToken '5' is different from '5.1' that was encountered earlier. MySql.Data.Entity.Properties.SchemaDefinition-5.1.ssdl(7,4) : error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'Schema' is already defined. MySql.Data.Entity.Properties.SchemaDefinition-5.1.ssdl(357,4) : error 0019: Each type name in a schema must be unique. Type name 'MySqlClient.Table' was already defined. MySql.Data.Entity.Properties.SchemaDefinition-5.1.ssdl(369,4) : error 0019: Each type name in a schema must be unique. Type name 'MySqlClient.TableColumn' was already defined.
Bu hatanın çözümü için ufak bir Google araması yaptığınızda, sorunu ilk yaşayan kişinin kendiniz olmadığınızı göreceksiniz.
Arama sonuçlarında yazanları uygulamaya çalıştığınızda, projenizin çalıştığını göreceksiniz. Ama bir süre sonra aynı hata mesajını alırsanız yine şaşırmayın. 
İşte benim çözümüm:
web.config dosyasını açın ve EF Connection Stringinin tanıtıldığı satırı bulun.
<connectionStrings> <add name="MyEntities" connectionString="metadata=res://*;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;User Id=root;password=xxxx;Persist Security Info=True;database=mydb;charset='latin5';"" providerName="System.Data.EntityClient" /> </connectionStrings>
Hataya sebep olan tanımlama: metadata=res.//*;
Şimdi yapmanız gereken solution unuza yeni bir Class Library eklemek.

Ben Class Library'me MyEntities adını verdim. İçerisinde otomatik olarak gelen Class1.cs ye ihtiyacımız yok silebilirsiniz.
Şimdi projenize sağ tıklayıp Properties penceresi girin. Assembly Name ve Default Namespace alanlarına örnek olarak kendi adınızı verebilirsiniz.

Projeye sağ tıklayıp Add > New Item'dan ADO.NET Entity Data Model i seçin. (Bu aşamaları detaylı anlatmama gerek yok, bu yazının konusu değil, o yüzden sonraki aşamaları geçtiğinizi düşünüyorum.)
Projenizi derleyin. Hata olmadığından emin olalım, dahası DLL imiz de oluşsun.

İşin renkli tarafı bundan sonrası;
IL Disassembleri çalıştırın.

IL DASM dan oluşan DLL dosyanızı açın. Manifest e çift tıklayın.
Şu satırları bulun:
.mresource public MyModel.msl
{
// Offset: 0x00000000 Length: 0x000002BF
}
.mresource public MyModel.ssdl
{
// Offset: 0x000002C8 Length: 0x00000320
}
.mresource public MyModel.csdl
{
// Offset: 0x000005F0 Length: 0x00000219
}
Şimdi web.config teki EF tanımlama satırındaki metadata bilgisini şu şekilde değiştirin:
<connectionStrings> <add name="MyEntities" connectionString="metadata=res://DevrimAltinkurt/MyModel.msl|res://DevrimAltinkurt/MyModel.ssdl|res://DevrimAltinkurt/MyModel.csdl;provider=MySql.Data.MySqlClient;provider connection string="server=111.222.333.444;user id=root;password=xxxxx;persist security info=True;database=mydb;charset='latin5';"" providerName="System.Data.EntityClient" /> </connectionStrings>
DevrimAltinkurt/ yerine kendi namespace inizi yazmalısınız tabii ki.
Bundan sonra bu hata mesajını almayacaksınız. 
Herkese kolay gelsin.
#Entity-Framework #EF #Schema #Schema-specified-is-not-valid #error #class-library
Bende aldım bu hatayı ama hiç böyle atraksiyonlara gerek yok.
Projede EdmSchemaAttribute aratın bunu silin ilgili satırı sorununuz düzelecektir.
ben sitede konu anlatımından çok, direkt sorunların çözümlerini vermeye çalışıyorum.
nedenleriyle nasıllarıyla fazla ilgilenmiyorum.
o yüzden bazen böyle atlamalar oluyordur, üzgünüm. yazdığın mesajda da haklılık payın var, kabul.
senin dediğin konu ile ilgili olarak şunları söyleyebilirim:
IL DASM de bizim işimizi görecek bilgiler:
- MyModel.msl
- MyModel.ssdl
- MyModel.csdl
bunları web.config teki connectionString içerisinde uygun yerlere yazıyorum. olay bundan ibaret.
kolay gelsin :))
not: bu yazı ile ilgil olarak: bu sorunun çözümünü başka yerde bu kadar rahat da bulamazsın :))
Şu satırları bulun:
bulduk sonra?!! biş yapmadan web.confige mi gececez...
başka hata mesajlarının çözümlerini de zamanla ekleyeceğim siteye.
Model için ayrı proje oluşturup, refrans olarak eklemiştim. Olmayınca vaz geçmiştim. Web config değiştirilmesi gerektiğini öğrenmiş olduk.
Kolay gelsin.