Bu yazımda sizlere, Entity Framework Code First yapısıyla yazılmış bir projede, projeyi çalıştırdığınız bilgisayarlarda otomatik olarak veritabanı update yaparken karşılaşılan bir hatanın çözümünden bahsedeceğim.
Veritabanı update yaparken class’larda herhangi bir değişiklik yaptığımızda, Package Manager Console üzerinde Add-Migration migrationismi komutuyla o yaptığımız değişikliğin otomatik olarak migrations klasörüne gelmesini sağlıyoruz. Tabi bunun sonrasında update-database komutuyla kendi veritabanımızda değişiklik yaptırabiliyoruz.
Eğer bu komutları yapmazsak, projemizin veritabanı ile işi olduğu zaman “The model backing the <Database> context has changed since the database was created” hatası alırız ve projemiz çalışmaz. Peki ya başka bir yerde çalışan programlar için ne yapacağız? Her dışarda çalışan proje için bu şekilde yapmamız çok zor. Bunu Projemize otomatik yaptırma yöntemini anlatacağım şimdi.
Öncelikle migrations klasörümüz yoksa Package Manager Console üzerinde “Enable-Migrations -EnableAutomaticMigrations” yazıp otomatik migrate olayını aktif ediyoruz. Bu komutla birlikte Migrations diye bir klasör oluşmaktadır. Migrations klasörü içerisinde Configuration.cs sınıfında “AutomaticMigrationsEnabled = true;” bizim için otomatik olan veritabanı güncelleştirmesini yapmakla görevlidir ancak bazı eklemelerde yapmamız gerekmtedir.
public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; ContextKey = "VeriDbContext"; }
Configuration.cs dosyasını bu şekilde düzenlememiz gereklidir. ContextKey kısmı app.config dosyasında yazan Connection String adımız olmalıdır.
Daha sonrasında DbContext modelimize girerek gerekli düzenlemeleri yapmamız gereklidir.
public DbContextSınıfİsmi() : base("name=VeriDbContext") { Database.SetInitializer(new MigrateDatabaseToLatestVersion<VeriDbContext, Configuration>()); }
Bu düzenlemelerden sonra, “The model backing the <Database> context has changed since the database was created” hatasını, database üzerine elle değişiklik yapmadığımız sürece almayacağız.
Bu yaptığımız işlemler ne işe yarayacak kısmına bakacak olursak, projemizi çalıştırdığımız her yerde, veritabanı yoksa oluşturulur, varsa üzerinde olan değişiklikler uygulanır.
Sorularınız varsa yorum olarak sorabilirsiniz.
Bir yanıt yazın