NVC ile veri tabanı işlemleri
Burda esas paylaşmak istediğim nokta çok katmanlı mimarinin bize sunduğu kolaylık ve hızı göze almaktır.
MVC'nin bize sunduğu üç katmandan biraz bahsetmemiz gerekiyor.Model,View Controller;
(Bu katmanlar hakkındada ayrıntılı makaleler yazılacaktır üçüde çok geniş konular olmasından ötürü burda sadece
bir giriş mahiyetinde deyinmek istiyorum.)
Model katmanı: Bizim projemiz ve database'imiz arasındaki işlemleri gerçekleştireceğimiz yer.Burda birçok yöntem
kullanılabilir LinqToSql , nHibernate , Ado.net etity framework gibi çok yöntemler olabilir bu size kalmış ben
bu uygulamada Ado.Net entity model kullanmayı tercih ettim .
View katmanı:Bu katman bizim ekranlarımızı temsil ediyor yaptımız bütün işlemlerin sonunda kullanıcıya gösterilecek
olan Pages yapısı burdan kontrol ediliyor.
Controller katmanı:Mvc de üzerinde en çok durulması gereken mesele Controller katmanı çünki bizim database
ve viewlarımız arasındaki bütün işlemleri bu katman sağlıyor.Yanlış anlaşılmasın diğer katmanlarda çok önemlidir
biri eksik kalsa diğerleride doru çalışmaz..
Zaten uygulamayı geliştirirken daha net anlaşılıcaktır.
Öncelikler visual studio 2008 ile bir MVC aplications olurşturalım.
Not:MVc kullanabilmek için eklentileri indirip kurmalısınız bu linq altında hepsini bulucaksınız...
MVC aplications oluşturdunuzda size bir test projesi olluşturmak istiyormusunuz diye sorucaktır ben hayır diyorum
test kısmını ayrı bi makaleye saklıyorum şimdilik onun lüzumu oldunu düşünmüyorum.
projeyi olurşturdunuzda Vs2008 ekranının solunda göreceğiniz gibi ;
Bir solution altnda projeniz bulunuyor.içince katmanlara ayrılmış bir yapı gözlemliyoruz.
Kısaca deyinmek istiyorum ;
Properties, references ve App_Data kısmını geçiyorum.
Content kısmı; bizim sitemizin style kısmını yaptımız yani CSS olabilir veya imaj resimleri yada daha farklı tasarımların
içinde barındıran bir yapıdır.
Controolller kısmı;yukarda bahsettimiz controller kantmanı burda bizim database ve ekranlarımız arasındaki işlemler
sağlıyan classlarımızı barındıracaktır.
Model kısmı; Burası şu anda boş çünki herhangi bir model oluşturulmamış ayrıntılarına az sonra geçicez kısaca
database modelimiz burda olucak.
View katmanı;Burasıda adındanda anlaşıldığı gibi bizim ekranlarımızın olduğu kısım daha çok kullanıcı taraflı işlemler
burda olucaktır.
Burda üzeride ayrıca durulması gereken bi yerde Global.asax kısmı bu kısım route meselesine girdiği için
ve çok geniş bi konu olduğu için ayrı bi makalede yazılıcaktır. ileriki kısımlarda üzeride durulucaktır.
Şimdi uygulamamıza geçebiliriz
Öncelikler yeni bir database oluşturmaya başlıyoruz projese sağ tuşu tıklayın ve add new items sekmesine tıklayın.
Çıkan ekranda databasi için Sql server kullanıyoruz ben ismini Musteri verdim ok diyip oluşturuyoruz.
Burda dikkatinizi cektimi bilmiyorum ama projeye eklemenize rağman App_Data klasörünün altına eklemesi Microsoft'un
mimari yapıya ne kadar önem verdiği anlaşılır sanıyorum.
Databasemiz geldi şimdi bu database'e bir tablo yapıp sonra nasıl işlemler yapıcaz onlara bakalım.
database'imizde şöle bir yapı uygulamak istedim diyelimki bizim şirkketimizde çalışan müşterilerimiz var ve onların
Ad ,SoyAd,Telefon ve Mail gibi özelliklerini saklıyoruz ve bi web sayfasında sergilemek istiyoruz.(Aslında
bursı sizin hayal gücünüze kalmış)
Bu özelliklere sahip tablomuzu oluşturalım.
Tablomuz hazır veri tipleri vs onların ayrıntılarını size bırakıyorum.
Ekranda sergilemek için el ile bir iki kayıt girebiliz.Bunuda tablya sağ tıklayıp show table data sekmesi altından açık ekliyorz.
Databasemiz hazır olduğuna göre artık Model katmanımızı oluşturmaya başlayabiliriz.
Model klasörüne sağ tıklayıp add new items diyelim data sekmesinden Ado.Net Entity Data Modeli seçelim
ben adını MVCIntroModel yaptım hazırsa ok diyelim gelen ekranda istersek var olan bir database'yi açmakmı yoksa
boş bir model mi oluşturmak istediğimizi sorucak bizim databasemiz olduğu için Generate from database deyip next diyoruz.
Gelen ekranı biraz incelersek connection string ve hangi databaseyi kullanıcamız ve webconfigte hangi model uygulanıcağı
yer almaktadır burayada next diyip kullanmak istediğimiz databasenin tüm özellikleri tablolar viewlar spler biz burdan
istediğimizi seçebiliyoruz biz sadece tek tablo oluşturdumuz için tabloyu seçip fnish diyoruz ve modelimiz karşımızda.
Modelimiz hazır;burda Modelimizdeki tablonun ismini değiştirmemiz gerekiyor çünki Sql ile aynı isimler çakışıyor.
Modelimiz hazır olduğuna göre artık ekranları hazırlamak için Controller katmanını oluşturmaya başlıyabiliriz.
Controller katmanına sağ tık ve add new controller diyoruz.Burda çıkan ekranda controllerin ismini belirliyoruz
ve altta checbox'a tıklıyoruz checbox bize crate , update ve deteail metodlarını otomatik oluştumak istemisiniz diye
soruyor bizde istiyoruz tabi başka bi işlem yada çok complex bir yappı için kendi controller methhodlarmızı yazabiliriz
oda bi seçenek tabiki.
Add dedimizde bize hazır olarak metodlar geliyor ama boş prametre döndükleri için şu an pek işe yaramazlar biz
gerekli kodları yazmak için başlıyoruz hem her metodu incelicez hem işlemlerimizi gerçekleştiricez.
public class MusteriController : Controller
{
public ActionResult Index()
{
return View();
}
Öncelikle Index metodunu hazırlıyoruz burası sayfanıın ilk açıldında ne yapmasını belirliyoruz.
biz burda kaydı olan tüm müşterilerin listesini databaseden çekmek istiyoruz.
Bunun için yazmamız gereken kod şöle öncelikle datamodelimizi glabal bölegede instancelıyoruz
private MusteriEntities _entities = new MusteriEntities();
//
// GET: /Musteri/
public ActionResult Index()
{
return View(_entities.MusterisSet.ToList());
}
Kodumuzun geldiği hal bu buraya biraz deyinirsek sayfanın loadunda _entities modelini kullanarak databaseye bağlanıyor
ve musteri tablosunu set ediyoruz ve ToList() metodu ile tüm kolonları çekiyoruz.
Şu anda Index sayfamızın controlleri hazır ekranı hazırlamak için Index() kısmına sağ tıklayıp add view diyoruz.
Gelen ekranda sayfanın ismi en üstte ve daha sonrada view'ın data clasını belirliyruz oda model olarak belirledimiz
MVCIntrı.Models.Musteri oluyor en son olarak view 'ın contentini belirliyoruz verileri ekranda listelemek istediğimiz için list'i seçiyoruz.
burda masterpages'i varolandan alyorum sizin yaptınız bi masterpages varsa onu seçeblirsiniz.
En son add diyoruz ve ekranımızı oluşturuyoruz.
Ekranımızın son hali bu gördüğünüz gibi controller katmanı sayesinde data modele bağlandık ve ordan databaseden
istediğimiz tablodaki verileri ekranda sergiledik.
Yaptığımız ekranı görüntülemek için sitemaster page'inde şu kodu eklememiz lazım
<li><%= Html.ActionLink("Musteri", "Index", "Musteri")%></li>
Şu ana kadar databasedeki verilerimizi ve database modelimizi ekranda sergiledik şimdi ise yeni kayıtlar girmeyeçalışalım.
Bunun için MusteriController'u girip create metodumza geliyoruz.
public ActionResult Create()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
create işlemlerini iki bölüme ayrılmış şekildde geliyor birincisi ekranı olurşturcamız yer ikincisi metdun hangi
parametrelerle hangi işlemleri yapıcağını belirliyoruz.
Burda ilk önce ekranımızı oluşturalım daha sonra işlemlerimizi gerçkleştiririz üstteki create'ye sağ tıklayıp add view diyelim
gelen ekranda ilk işlemdekinden tek fark main content kısmını create olarak şeçiyoruz çünki yeni bir kayıt yapıcağız.
Ekranımız oluştur şimdi nasıl parametreler alıcak ona baklım istediğimiz şey kullanıcı create dediği zaman önüne bir form ve istenilen
bilgilerin girimesi ve bunların database'ye kaydı.
Kodlarımız şöle;
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")]Musteri bilgilerMusteri)
{
try
{
_db.AddToMakalesSet(bilgilerMusteri);
_db.SaveChanges();
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Kodumuzun son hali böyle, burda ilk olarak id'mizi bind ediyoruz.İşlemlerimiz Id üzerinden gerçekleşicek daha sonra
Musteri(sınıf) tablomuzdan bir değişken
oluşturuyoruz girdimiz verileri burdan databaseye aktarıcağız.
Try;catch bloğu içince
girdimiz yeni verleri bilgilerMusteri değişkenimize koyup musteri tablomuza ekliyoruz tabi bunlar model katmanımızdaki
DataModelimiz sayesinde oluyor.En son sayfayı açıyoruz.
catch bloğunu boş bıraktım isterseni bir hata sayfası yapıp hata olunca oraya yönlendirirsiniz hayal gücünüze kalmış.
Buraya kadar işlemlerimiz tamam şimdi ise kaydı olan bir müşterinin bilgilerini düzenlemeyi(Edit) yapmaya çalışalım.
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /Musteri/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Kodumuzun ilk hali bu burdada aynı createde olduğu gibi bir yapıvar önce ekranın durumu daha sonrada değişikliklerden sonraki hali
bulunuyor biz önce ekranmızın durumunu oluşturalım;
public ActionResult Edit(int id)
{
var musteriEdit = (from m in _entities.MusterisSet
where m.Id == id
select m).FirstOrDefault();
return View(musteriEdit);
}
Burda öncelikle musteriEdit değişkenimize oluşturuyoruz.Daha sonra _entities model katmanımız yardımıyla musterilerimizi set ediyorz.
Seçilen müşterimizin Id ile databasemiz ile kontrol ediyoruz eğer varsa(eşitse) ekranda sergiliyoruz.
Şimdi ise yapılan değişiklikleri kaydetmek için diğer metodumuzu düzenliyelim;
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Musteris musteriEdit)
{
try
{
var realMusteri = (from m in _entities.MusterisSet
where m.Id == musteriEdit.Id
select m).FirstOrDefault();
_entities.ApplyPropertyChanges(realMusteri.EntityKey.EntitySetName, musteriEdit);
_entities.SaveChanges();
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Burdada öncelikle realMusteri adında değişkenimizi oluşturuyoruz.Daha sonra model katmanımız yardımıyla set ediyouz clasımızı
model katmanımızın ApplyPropertyChanges metodunu kullanarak yapılan değişiklikleri kayıt ediyoruz.
Bölece edit işlemlerimizde bitmiş oluyor.
Ekranımızın son hali böyle.
Şimdi ise ben detail kısmını yapmıyorum çünki ayrıntıları zaten edit kısmı hallediyor onun yerine delete işlemini gerçekleştirmek
istiyorum.
Bunun için yapmamız gereken kolay bi işlem var sırasıyla başlıyorum öncelikler Editte olduğu gibi metodumuz
public ActionResult Delete(int id)
{
var musteriDelete = (from m in _entities.MusterisSet
where m.Id == id
select m).FirstOrDefault();
return View(musteriDelete);
}
burda yaptımız işlem kısmen aynı musteriyi Id'sinden çekip ayrı bir ekrana alıyoruz.Bu işlemden sonra Delete() metoduna sağtıklayıp Add view diyoruz
çıkan ekranda aynı işlemleri sıralıyoruz sadece view content kısmını boş bırakıyoruz onu bi kendimiz oluşturucağız.
Add dediğimiz zaman bize boş bir sayfa hazırlıyor ;
Biz bu sayfayı tasarlıyoruz ;
Bu kaydı silmek istediğinizden eminmisiniz
<%= Model.Ad%> <%= Model.SoyAd %><%=Model.Telefon %><%=Model.Mail %>?
</p>
<% using (Html.BeginForm(new { Id = Model.Id }))
{ %>
<p>
<input type="submit" value="Delete" />
</p>
<% } %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
Burda ilk olarak mesajımızı belirliyoruz daha sonra model katmanımız yardımıyla verilerin hepsini ekrana çekiyoruz.
Şimdi ise yine model katmanımız sayesinde Id üzerinden Delete işlemimizi gerçekleştiriyoruz.
Tabi bunun olabilmesi için önce Delete motodumuzu Contrller katmanında yazmamız gerekiyor.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(Musteris musteriDelete)
{
try
{
var realMusteri = (from m in _entities.MusterisSet
where m.Id == musteriDelete.Id
select m).FirstOrDefault();
_entities.DeleteObject(realMusteri);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Bu kod bloğunda göründüğü gibi işlemlerimiz basit bir şekilde oluşuyor.Öncelikle yine Musteri tablomuzu set ediyoruz.
Daha sonra seçilen muşteri Id'si ile databaseyi kontrol edip eğer öle bi kayıt varsa DeleteObject() metodunu kullanarak kaydı siliyoruz
ve ardında kayıt ediyoruz.
Buraya kadar herşey mükemmel tabi son olarak delete işlemini gerçekleştirmek için ;
index sayfamızdaki Detail kısmını Delete olarak değiştirmemiz gerekiyor.
Yeni bir sekmede yazılabilir ama ben onu değiştirmeyi tercih ettim size kalmış.
Buraya kadar yapmış olduklarımıza bakarsak ;
MVC üzerinden yeni bir database oluşturmak ve bir Ado.net Entity model yardımıyla database'imize yeni kayıt girmeyi ve düzenlmeyi
ve silmeyi ve bütün kayıtları ekranda sergilemeyi incelemiş bulunuyoruz.
Burdaki işlemler dahada genişletilebilir burda üzerinde durulması gereken çok katmanlı mimari yapının bize sunduğu kolaylıklar ve
zamanı ne kadar iyi kullandığımızdır.
Yeni bir MVC makalesinde görüşmek üzere hoşca kalın....
| Etiketler | : | Sql deyimleri |
| Kategoriler | : |
SQL |
Webbilgileri.com' da bilgilerinizi paylaşmak istiyorsanız.
Ders Ekle linkmizi kullanabilirsiniz.
0 Adet Yorum Bulunmaktadır.