EntityFramework SqlMigrations ile Verileriniz Kaybolmasın

Başlıktan bir şey anlamamış olabilirsiniz ama eğer Ado.Net Entity ile ilgiliyseniz bu yazı çok hoşunuza gidecek ;)

3-5 dakika önce Google Reader dan Code First Migrations: Walkthrough of August 2011 CTP başlığıyla gördüğüm yazıyı hemen sizlerle paylaşmak istedim.

Bildiğiniz üzere eğer modelinizi code-first yaklaşımıyla oluşturmuşsanız ve projenizi çalıştırmışsanız veritabanı otomatik olarak oluşuyor ve sonrasında modelinizde yaptığınız değişikliği veritabanına uygulamak için context inizin içine “System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<Test.Models.TestContext>());” ifadesini ekleyerek modeldeki güncellemeyi veritabanımıza uyguluyorduk. Fakat bu yöntemde istenmeyen bir durum oluşuyor ve eğer veritabanında bilgi varsa bilgilerde gidiyordu çünkü bu kod veritabanını komple kaldırıp yeniden oluşturarak güncelleme işini yapıyordu. Artık bu can sıkıcı durumdan kurtuluyoruz !

Yapmamız gereken tek şey projemize “EntityFramework.SqlMigrationspaketini eklemek. Sonrasında yeni bir alanı güncellemek için paket yönetici konsoluna “Update-Database” komutunuı yazıp çalıştırmamız yeterli oluyor. Eğer varolan bir alanın adını güncellemek istiyorsak “Update-Database -Renames:”kullanici.Email=>kullanici.EmailAddress”” komutunu çalıştırmamız yeterli. SqlMigrations’ un diğer özelliklerine buradan bakabilirsiniz. Bu işlemler yapılırken veritabanı içindeki bilgi kaybolmuyor sadece ilgili değişiklikler yapılıyor.

Bu mekanızma sayesinde önemli bir açığın kapandığını düşünüyorum, yukarda da belirttiğim gibi can sıkıcı bir durumdu ve iki türlü iş ile uğraşıyorduk. Biraz alel acele yazmak zorunda kaldım fakat durum sanıyorum anlaşılmıştır :)

Easy Db Tool ile veritabanı işlemlerini kolayca halledin.

Epey bir zaman kullandığım veritabanı aracımı sizlerle paylaşmak istedim. Bu vesileyle üzerimde büyük emeği ve desteği bulunan sevgili arkadaşım, kardeşim Yunus Emre Çavuşoğlu‘ na teşekkürlerimi sunmak istiyorum.

Bu araçla birlikte;

  1. Açık kaynak olduğu için, istediğiniz gibi şekillendirebilirsiniz.
  2. Veritabanına ekleme, silme ve güncelleme işlemlerini kolaylıkla yapabilirsiniz.
  3. Veritabanında ki bilgileri kolayca DataTable ye kolayca aktarabilirsiniz.
  4. Oluşturduğunuz formdaki eleman isimlerinin veritabanındaki isimlerle aynı olması şartıyla bir kerede formdaki tüm bilgileri ekleyebilir veya güncelleyebilirsiniz. (* alan adlarının başına 3 karakterli kontrollerin kısaltılmış ön ekinin girilmesi gereklidir. Örneğin; txtsoyadi, ddlsehir, rblcinsiyet gibi..)
  5. Veritabanında ki bilgileri DataTable ye aktarırken bilgiyi önbellekte (cache) tutma ve bu belleği basit bir şekilde yönetme.

Kullanımı, öncelikle veritabanında ki tablomuza karşılık gelen bir sınıf yazıyoruz. Bu sınıfta id alanını belirtmiyoruz , zamanında böyle yapmışım böyle kalmış :)

    // Poco Class
    public class testTable
    {
        public string name { get; set; }
        public string email { get; set; }
        public DateTime? createDate { get; set; }
        public int? age { get; set; }
    }

Normal ekleme işlemi

            testTable tt = new testTable
            {
                name = "test",
                email = "mail@mail.com",
                age = 18,
                createDate = DateTime.Now
            };

            db.Insert(tt, true);

Formda ki bilgileri ekleme işlemi;

<div runat="server" id="divForm">
 name <asp:TextBox runat="server" ID="txtname" /> <br />
 email <asp:TextBox runat="server" ID="txtemail" /> <br />
 age <asp:TextBox runat="server" ID="txtage" /> <br />
 <asp:Button Text="Add" runat="server" ID="add" onclick="add_Click" />
</div>
db.Insert(new testTable(),divForm,false);

Örneklerde ki true, false olarak ifade ettiğimiz değer, eklenilen kaydın id sinin geriye integer olarak dönüp dönmeyeceğini ifade ediyor. Diğer örnekler ve EasyDbTool için gitHub sayfasını ziyaret edebilirsiniz https://github.com/apoStyLEE/easy-Db-Tools