Modelleri bir kalıp olarak görebiliriz. Bu kalıp view ve controller arasında veri taşımaya yarar. MVC bu yapıları kullanarak view ve controller için standart CRUD(create, read, update, delete) işlemleri için hazır şablonlar sunar. Bu yapıya scaffolding (iskele) denir. Bu yapıyı ilerdeki konularda tartışıyor olacağız. Şimdi örneklerle model kavramını anlamaya çalışalım.
MODEL TANIMLAMA
Daha öncede belirtmiştik, yeni proje oluştururken internet application şablonunda oluşturursak, proje için gerekli olan css, js ve üyelik için gerekli view, model ve controllerlar hazır olarak gelir. Model klasörünün içerisinde ise üyelik için gerekli olan View sayfalarına özel sınıflar vardır.
Model klasörünün içerisinde üyelik sayfalarına özel model dışında başka model yoktur. MVC bizim çalışma alanımızı bilmediğinden, başka model yoktur. Biz kendi modellerimizi oluşturacağız.
Model örneğimizi bir haber portalı yapıyormuşuz gibi hazırlayacağız. Modellerimiz Haber, Yazar ve Kategori olsun. Bu modellerimiz CRUD işlemlerini gerçekleştirebilecek yapıda olsun.
haber sınıfı aşağıdaki gibidir.
public class Haber { public virtual int id { get; set; } public virtual int yazarId { get; set; } public virtual int kategoriId { get; set; } public virtual string baslik { get; set; } public virtual string aciklama { get; set; } public virtual string icerik { get; set; } public virtual Yazar yazar { get; set; } public virtual Kategori kategori { get; set; } }
Bu haber sınıfına one-to-one bağlı olan yazar sınıfı;
public class Yazar { public virtual int id { get; set; } public virtual string ad { get; set; } public virtual string eposta { get; set; } public virtual string ozgecmis { get; set; } }
Haber sınıfına one-to-many bağlı olan Kategori sınıfı;
public class Kategori { public virtual int id { get; set; } public virtual int ad { get; set; } public virtual List<Haber> haberler { get; set; } }
Bu oluşturduğumuz modeller veritabanı tablolarımızı temsil ediyor. Dikkat ederseniz Haber sınıfının içerisinde foreign_key olarak kategori ve yazar id si bulunuyor. Ayrıca kategori sınıfı içerisinde o kategorinin haberlerini temsil eden bir haberler listesi var.
Bilirsiniz ki veritabanı tabloları arasındaki bağlantılar bu foreign_key ler ile yapılır. Aynısını bizde sınıflar arasında yapıyoruz. Sınıflarda aslında foreign_key kullanmasakta olur. foreign_key özelliğinin sınıflarda kullanılmasının çok fazla avantajı vardır. Çünkü MVC bu yapıyı kullanan araçlar sunmaktadır. Konular ilerledikçe bunun önemini daha iyi anlayacağız.
Ali bey, buradaki virtual keyword ne işe yarıyor?
YanıtlaSilKendisinden türetilen sınıflarda, bu özellikleri override edebilir. Burada aslında çokta kullanımının gerekliliği yok. Genelde tanımlanabilir.
SilKategori tablosu içerisinde haberlerin tutulması bize neyi sağlıyor. Haberler tablosu içerisindeki verilerden kategori id si şu olanları getir diyerek işlem yapamazmıyız? Burada bunu tanımlamanın bir artısı var mı?
YanıtlaSilİlişkisiz tablo oluşturmuş olursunuz. Kategori haberlerini cekerken örneğin;
SilIList Haberler = db.Haber.Where(x=>x.KategoriId == kategori.Id);
şeklinde cekersiniz ama ilişkili olursa
IList Haberler = kategori.Haberler;
Şeklinde cekersiniz. Tamamen ikişkili bir veritabanı tasarımı ve EF nin tüm kolaylıklarını kullanabilmek için boyle tanımlıyoruz...
Çok teşekkürler.
SilMerhaba sanırım
YanıtlaSilpublic virtual yazarId { get; set; }
public virtual kategoriId { get; set; }
Tip tanınlanmamış
evet haklısınız. Düzeltiyorum hemen :)
Sil[HTTPGET]
YanıtlaSilpublic ActionResult Create(){
}
İLE
[HTTPPOST]
public ActionResult Create(){
}
Arasındaki fark nedir yardımcı olabilirmisiniz?
Aşağıdaki linkten inceleyebilirsiniz.
Silhttp://www.yazilimdilleri.net/YazilimMakale-3451-ASP-NET-MVC-FORM-KULLANIMI-VE-POST---GET-METODLARI.aspx