Merhaba arkadaşlar,

Uzun zaman oldu en son bir blog yazısı yazalı (şaka maka 3 sene olmuş beaa). Ama bu blog yazım benim için ilerde tekrar açıp bakılacak birşey olması için kendime de nottur aslında 🙂

Bir iş için müşteriler illaki MySql kullanacağız paramız yok Microsoft’ a veritabanı için para ödeyemeyeceğiz diye tutturdular. E benim normalde WordPress haricinde oturup MySql ile hiç haşır neşirliğim yok. Gel gelelim MySql ile .Net i konuşturacağız 🙂 Güzel.

Neyse, hemen olaya gireyim. Aslında sorun şu, ADO.Net Entity Data Model oluştururken MS Sql’ e tıkır tıkır bağlanıyorduk ama iş MySql’ e gelince biraz sıkıntı çıkartmaya başladı. Yeni bi connection tanımlarken data source umuzun MySql olduğunu belirtmemiz gerekiyor. Ama nasıl.

Araştırırken rastladığım bir videoda birisi web.config’de direk system.data nin içine MySql Data Provider’ ı belirterek işi çözmüş. Ama bende yemedi! Ama yine de belki sizin işinize yararsa diye linkini paylaşıyorum: https://www.youtube.com/watch?v=WcfCinE53qA

Peki ben ne yaptım?

 

http://dev.mysql.com/downloads/connector/net/ adresinden MySQL’ in .Net Connector’ünü download edip .msi uzantılı dosyayı bilgisayarımıza kuruyoruz. Kurduktan sonra ilk olarak “C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5” yolundaki dll’leri projemize referans olarak ekleyelim. Eklediğimiz bu dll’lerin hepsinin copy local özelliğini true yapalım.

Screenshot 2016-02-17 03.07.41

Fakat şu durumda MySQL’ in bağlantı seçeneklerinde çıkmasını beklemek olmaz. Yine bu kopyaladığımız dll’leri “C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies” adresine giderek bu dll leri buraya kopyalamak. Yalnız bu işlemi yapmadan önce Visual Studio’nuzu kapatın!

Bu aşamadan sonra artık data source olarak MySQL gözüküyor!

Screenshot 2016-02-17 03.13.20

Sonrasında localhost’unuza ya da kullandığınız bir sunucuya başarılı bir şekilde bağlanıp databaselerinizi görebiliyorsunuz. Ancak oda nesi!

Screenshot 2016-02-17 03.14.57

Bir sonraki adım da en son sürüm olan Entity Framework kullandığınız halde bu database provider ı ile uygun olmadığını söylüyor. E heralde, normalde entity framework’ümüz MS Sql üzerinde çalışıyor.

Bildiğimiz gibi web.config’ in sonlarına doğru entity framework’e ait bilgiler yer alıyor. Bunu MySQL’ e göre düzenleyelim:

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>

Bundan sonra bu hata yerine tabloları seçtiğimiz kısım geliyor ve gerekli olan tabloları seçip devam ediyoruz. Fakat yine bitmedi 😀 Tablolar oluşurken ‘System.Data.StrongTypingException: The value for column ‘IsPrimaryKey’ in table ‘TableDetails’ is DBNull. gibi hatalar gelmeye başladı. Bunun çözümü olarak ise MySQL’ inizi tekrar başlatın, ardından use <<database name>> ile database’nizi seçin, sonra set global optimizer_switch=’derived_merge=OFF’; diyip enter a basıyoruz 🙂 ardından edmx i tekrar ayarlayıp işlemlerimize devam ediyoruz…

Eskiden entity’i nasıl kullanıyorsak o şekilde kullanmaya, linq sorgularını yazmaya devam edebilirsiniz.

Umarım faydalı olmuştur. Hoşçakalın!