Serinin devamı olan bu yazımıza server side olan bir uygulamada
verileri nasıl gösterileceğine değineceğiz.
Uygulamamıza
çeşitli veri kaynaklarından veriler gelebilir SQL
Database, Oracle DB, Sql Azure, Sharepoint, mainframe gibi, biz bu veri
kaynaklarından birini seçebiliriz ve dataModel olarak da NHibernate,
Linq2Sql, Entity Framework, Stored Proc den birini seçebiliriz.
Biz uygulamamızda veri kaynağı olarak SQL Database
ve datamodel olarak da Entity Framework seçtik. Şimdi uygulamamızı yapmaya
başlayalım.
Bir önceki yazımızda yaptığımız
projeden devam edeceğiz projemizi açtık ve Business Application Web isimli
projemizdeki App_Data klasörünün altına DishView.mdf ismi ile veri kaynağımızı
atıyoruz.
Şimdi
projemize verilerimizin modelini oluşturmak için yine Web projemize bir tane
ADO.NET Entity Data Model ekliyoruz.Bu modele istediğimiz ismi verebilirsiniz
biz BusinessModel verdik.
Ekle dediğimizde karşımıza Boş oluşturmak veya bir database
den generate ederek model oluşturma şeklinde iki seçenek çıkacak biz modelimizi
bir database bakarak yapacağımız için visual studio nun bizim yerimize modeli
generate edecek. Generate from Database seçeneğini seçip ileri diyoruz.
İleri dediğimizde karşımıza veri kaynağını
seçeceğimiz, connection stringi oluşturacağımız ve Web.Config dosyasına
connection stringi oluşturulurken kullanılacak ismi belirteceğimiz
ekran karımıza gelecek.
Bu ekranda bağlanmak
istediğimiz veri kaynağının çeşidini belirlemek için Change butonuna tıklıyoruz
ve karşımıza aşağıdaki gibi bir ekran gelecek.
Bu ekrandan bağlanmak istediğimiz
veri kaynağını türünü seçiyoruz. Biz projemizde Mdf uzantılı DishView.mdf verikaynağını
kullancağımız için Sql Server Database File ı seçiyoruz ve Ok ye tıklıyoruz.
Şimdi bağlanacağımız veri
kaynağını DishView.mdf i Browser diyerek projemize koyduğumuz yeri bulup
seçiyoruz . Görüldüğü üzere bu ekranda veri kaynağına bağlanmak için kullanıcı
adı ve şifrenin de belirlendiği alanlar var bu alanlar veri kaynağına bağlanmak
için şifre belirlenmiş ise kullanılır. Bizim veri kaynağımızda şifre belirlenmemiş
olduğu için kullanmıyoruz.
Görüldüğü üzere otomatik olarak data modeli kullanırken kullanacağımız isim (DishViewEntities) ve Config dosyasına eklenecek connection string bu ekranda. Next butonuna tıklıyoruz ve karşımıza veri kaynağında bulunan tabloların, şemaların ve stoured procedur lerin listesi geliyor.
Data modelimizde olmasını
istediğimiz tabloları seçiyoruz ve data modelimizin ismini belirliyoruz son
olarak Finish butonuna tıklıyoruz. Bu işlemden sonra aşağıdaki gibi bir data
modelimiz oluşacak
Web.Config dosyamızda aşağıdaki
gibi connection string eklenecek.
<connectionStrings>
<add name="DishViewEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider
connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DishView.mdf;Integrated
Security=True;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
Şimdiye kadar projemizin data
katmanını oluşturmuş olduk. Bundan sonra ki kısımda bu uygulamayı kullanacak
kişilerin verileri görmesini sağlayacak İş katmanını (Business Logic)
yazacağız. Bunu yapmak için yine BusinessApplication.Web projemize yeni bir tane
Domaine Service ekleyeceğiz. Bu DomainService
verileri güncellemeyi, filtrelemeyi
verilere erişimdeki güvenliği ve verilere ulaşırken oluşacak hata
kontrolünü çok kolaylaştıran bir WCF servicinin özel türüdür.
Projemize yeni bir domain service
eklemek için projemize sağ tıklayın yeni bir item ekliyoruz.
Add butonuna tıkladığımızda karşımıza aşağıdaki gibi bizim data modelimizdeki tabloların listesini göreceksiniz.(Not: Aşağıdaki ekran daki gibi eğer tablolarınızın listesi gelmedi ise o zaman projenizi derleyin daha sonra tekrar eklemeyi deneyin o zaman gözükecektir.)
Bu ekranda hangi tabloda update
olacak veya hangi tabloda sorgulama olacak onları belirtiyoruz. Bizim
projemizde restoran lar sorgulana bilecek fakat update edilemeyecek şeklinde
ayarlıyoruz. Ok butonuna tıklandığımızda projemize DishViewDomainSerice class ı
eklenecektir.
namespace BusinessApplication1.Web
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
using System.ServiceModel.DomainServices.EntityFramework;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
// Implements application logic using the DishViewEntities context.
// TODO: Add your application logic to these methods or in additional methods.
// TODO: Wire up authentication (Windows/ASP.NET Forms) and uncomment the following to disable anonymous access
// Also consider adding roles to restrict access as appropriate.
// [RequiresAuthentication]
[EnableClientAccess()]
public class DishViewDomainService : LinqToEntitiesDomainService
{
// TODO:
// Consider constraining the results of your query method. If you need additional input you can
// add parameters to this method or create additional query methods with different names.
// To support paging you will need to add ordering to the 'Plates' query.
public IQueryable GetPlates()
{
return this.ObjectContext.Plates;
}
public void InsertPlates(Plates plates)
{
if ((plates.EntityState != EntityState.Detached))
{
this.ObjectContext.ObjectStateManager.ChangeObjectState(plates, EntityState.Added);
}
else
{
this.ObjectContext.Plates.AddObject(plates);
}
}
public void UpdatePlates(Plates currentPlates)
{
this.ObjectContext.Plates.AttachAsModified(currentPlates, this.ChangeSet.GetOriginal(currentPlates));
}
public void DeletePlates(Plates plates)
{
if ((plates.EntityState == EntityState.Detached))
{
this.ObjectContext.Plates.Attach(plates);
}
this.ObjectContext.Plates.DeleteObject(plates);
}
// TODO:
// Consider constraining the results of your query method. If you need additional input you can
// add parameters to this method or create additional query methods with different names.
// To support paging you will need to add ordering to the 'Restaurants' query.
public IQueryable GetRestaurants()
{
return this.ObjectContext.Restaurants;
}
}
}
Görüldüğü üzere normalde bizim
yazmamız gereken metotlar otomatik olarak oluştu. Tabî ki bizde istersek bu
metotlara yenilerini ekleyebiliriz. Örneğin bir tane ekleyelim.
public IQueryable GetRestaurantsWithRegion(string pRegion)
{
return this.ObjectContext.Restaurants
.Where(r => r.Region != pRegion)
.OrderBy(r => r.ID);
}
Şimdiye kadar ne yaptık projemize
bir tane data model ekledik ve Silverlight ın bu data modele ulaşa bilmesi için
WCF service in türevi olan DomainService ekledik.
Bir sonraki yazımıza da verileri
nasıl göstereceğiz onu yazacağım görüşmek dileği ile iyi günler









0 yorum:
Yorum Gönder