ben

OMÜ , Bilgisayar Mühendisliği, 13'

5 Mart 2018 Pazartesi

Code First


  Bu yöntem class’lar  ve mapping kodları yazılımcı tarafından oluşturulur.Daha sonra veri tabanı  bu class’lardan türetilir  ve modellemenin durumuna göre  tekrardan şekillenebilir. Yine aynı örnek üzerinden giderek bookstore örneğinin küçük bir kısmını (yazar, kitap ve yayınevi modelleri) code first ile yeniden yapalım. Yeni bir proje oluşturalım




Boş bir asp.net projesini oluşturduk. Projeye geçmeden önce references=>manage nuget packages ile entity framework kütüphanesini yükleyelim.
Entity framework kurulduktan sonra model klasörü içerisine Data klasörü oluşturup, Data klasörü içerisine de model ve context klasörü oluşturalım.

Proje üzerinden code first yaklaşımı ile modelimizi kodlamaya başlayalım.Model klasörüne  sağ tıklayarak modellerimzi oluşturalım. Modellerimizin ilişkilerine göre bağlantılarını vermemiz gerekecek

               Book and author: one to many
               Book  and publisher: one to many

Publisher modelinde bir publisher ‘a ait birden fazla book olabilir. Bu yuzden book modelini collection olarak bağladık.

namespace CF_bookstore.Models.Data.models
{
    public class Publisher
    {
        public int PublisherID { get; set; }
        [Required, StringLength(80)]
        public string name { get; set; }
        public string address { get; set; }
        public string phone { get; set; }
        public virtual List<Book> books { get; set; }

    }
}
Book modeli bir adet author ‘a ait olabilir, ve bir adet Publisher ‘a ait olabilir. Bu yuzden model olarak bağladık.

namespace CF_bookstore.Models.Data.models
{
    public class Book
    {
        public int BookID { get; set; }

        [Required,StringLength(80)]
        public string name { get; set; }
        public int number_of_pages { get; set; }
        public virtual Author author { get; set; }
        public virtual Publisher publisher { get; set; }

    }
}
Author modeli, birden fazla book modeline ait olabileceği için book modelini collection olarak bağladık.

namespace CF_bookstore.Models.Data.models
{
    public class Author
    {
        public int AuthorID { get; set; }
        [Required, StringLength(80)]
        public string name { get; set; }
        [Required, StringLength(80)]
        public string surname { get; set; }
        [Required, StringLength(80)]
        public string email { get; set; }
        public virtual List<Book> books { get; set; }
    }
}
Not: Buradaki propertylerden bazılarının sql serverda oluşmasını isteniyorsak hemen üstüne [NotMapped] Yazmamız yeterlidir.

Model tasarımın ardından veritabanı işlemleri için DataContext sınıfı oluşturmamız gerekiyor. Oluşturacağımız bu context sınıfı için yeni bir klasor olusturalım ve onun içerisine BookstoreContext adını verelim.


Oluşturduğumuz sınıfa using System.Data.Entity kütüphanesini ekleyelim.

namespace CF_bookstore.Models.Data.context
{
    public class BookstoreDBContext:DbContext
    {
        public BookstoreDBContext()
        {
            Database.Connection.ConnectionString = "server=.; database=CFBookstore; Trusted_Connection=true";
        }
        public DbSet<Author> Authors { getset; }
        public DbSet<Publisher> Publishers { getset; }
        public DbSet<Book> Books { getset; }
    }
}


Burada sql server üzerinde tablolar oluşturulurken otomatik olarak model isimlerinin sonuna ‘s takısı getirilerek çoğul isim verilir. Bunu önlemek için OnCreatingModel özelliğini kullanmamız gerekir. Dbcontext sınıfı içerisine aşağıdaki komutu ekleyin

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
               modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
         }

Sql server veritabanına bağlanmak için migration yapısına ihtiyacımız var. Bunun için package manager console yapısını kullanacağız.




PM> enable-migrations


Açılan migrations ayarlarını otomatik yapması için  AutomoticMigrationsEnabled özelliğini true yaptık.




Artık veritabanımızın SQL server üzerinde de oluşması için manager console üzerinden;

PM> update-database
Or
PM> update-database-force

Eğer modellerde değişiklik yaparsanız, sql serverında güncellenmesi için yeniden console üzerinden database-update yazmanız yeterlidir. 

Sql server’a gidip bakalım veritabanı modelimiz doğru olarak  yüklenmiş mi?




Hiç yorum yok: