Silverlight 4 RIA Services ve Business Application -2 (Entity Framework de dataların görüntülenmesi)


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. 

İstersek bu ekranda bağlantımızı Test Connection butonuna tıklayarak test edebiliriz. Bu ekran da ki işimiz bitti Ok butonuna tıklıyoruz. Atık connection stringinin ve data modelinin oluşturma işleminin sonuna geldik.




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=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DishView.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" 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

Share