ASP.NET MVC'de MySQL ile Code First Kullanımı
21 Jun 2015EntityFramework yapısı bizlere Code First, Model First ve Database First olmak üzere 3 farklı yaklaşım sunar. Bu makalemizde Code First yaklaşımının MySQL ile kullanımını inceliyor olacağız. Öncelikle bilgisayarımızda MySQL Server ve MySQL connector’un kurulu olması gerekiyor. Gerekli linkler aşağıdaki gibidir;
Connector kurulumunu yaptıktan sonra Visual Studio ile yeni bir MVC projesi açıyoruz. Projemize, Code First yaklaşımı için EntityFramwork'u, MySQL için de MySql.Data ve MySql.Entity kütüphanelerini yüklememiz gerekiyor. Bunun için proje içerisinde Nuget üzerinden arama yapabilirsiniz ya da Nuget Package Manager konsolu üzerinden sırasıyla aşağıdaki şekilde yazıp projeye yükleyebilirsiniz.
Install-Package EntityFrameworkBu yazım ile kütüphanelerin son versiyonları kullanıyor olacağız. Gereksinimlerimizi tamamladıktan sonra Model yapımızı yani veri tabanında oluşturacağımız tabloların kod tarafında yazımını gerçekleştirelim. Ürünler ve Kategoriler şeklinde 2 tablo oluşturalım. **Product.cs**
Install-Package MySql.Data
Install-Package MySql.Data.Entity
namespace CodeFirstApplication.Models
{
public class Product
{
public int ProductId { get; set; }
public int ProductCode { get; set; }
public int CategoryId { get; set; }
public string Name { get; set; }
public string Color { get; set; }
public decimal Price { get; set; }
public int StockCount { get; set; }
public string ImgPath { get; set; }
}
}
namespace CodeFirstApplication.Models
{
public class Category
{
public int CategoryId { get; set; }
public string Name { get; set; }
}
}
namespace CodeFirstApplication.Models
{
public class CodeFirstContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}
}
Context'i oluşturacağımız bu dosyada tablo isimlerini verirken EntityFramework siz yazmasanız da "s" ve ya "ies" eklemekte, burada düzenli olması açısıdan ben kendim yazdım.Model ve context yapımızı oluşturduğumuza göre **Web.config** dosyamızda veri tabanı bağlantı cümleciğimizi güncelliyoruz. Güncelliyoruz dememin sebebi **EntityFramework** dll dosyamızı nuget üzerinden yüklediğimiz sırada buraya örnek connection string'i ve microsoft yine kendi ürünü olan Sql Server'in provider sınıfını otomatik olarak eklemekte, biz kendi bilgilerimiz ile güncellerken **name** kısmına context'e verdiğimiz adın aynısını veriyoruz, **providerName**'in de aşağıdaki gibi olduğuna dikkat edelim. Oluşacak veri tabanı adını da buradan belirtebiliyoruz, ben CodeFirstDB adını verdim siz farklı isim kullanabilirsiniz.
<connectionStrings>
<add name="CodeFirstContext" connectionString="Data Source=localhost;port=3306; Initial Catalog=CodeFirstDB;uid=root; pwd=1234" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

public Configuration()
{
AutomaticMigrationsEnabled = true;
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
}

Specified key was too long; max key length is 767 bytesMysql kod tarafında oluşturulduğundan default olarak InnoDB engine yapısını kullanır, primary key olarak belirttiğimiz alanlar için bu hatayı döndürür. Buna çözüm olarak Context modelimizi aşağıdaki gibi tekrar güncelliyoruz. Daha önce yukarıda SqlGenerator için yaptığımız ayarın bir benzerini burada yapıyoruz. **CodeFirstContext.cs**
namespace CodeFirstApplication.Models
{
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class CodeFirstContext : DbContext
{
static CodeFirstContext()
{
DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
}
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}
}

