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
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 { get; set; }
public DbSet<Publisher> Publishers { get; set; }
public DbSet<Book> Books { get; set; }
}
}
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:
Yorum Gönder