Post Page Advertisement [Top]



Bu bölümde veri saklama konusunda önemli bir yer tutan ve Windows Phone 7 nin Isolated Storage ‘ini kullanarak veri tabanı oluşturma ve veri tabanı işlemlerini öğreneceğiz.Kullanıcın istediği sayıda alış-veriş listesi tutabileceği ,bu listelere ürünler ekleyebileceği,fiyatları girilen ürünlerin fiyatlarını toplayarak o anki listedeki alışveriş maliyetini gösterebilecek,kullanıcın sevdiği ürünleri saklayabileceği gibi bir çok özelliği olan bir uygulama yaparak Windows Phone 7 de veri tabanı işlemlerine giriş yapalım.
Bu uygulamada en önemli kısım alışveriş listeleri sayısının kullanıcıya bağlı olarak oluşturulması yani dinamik olarak oluşturulmasıdır tabiî ki bu durum ek bazı işlemler gerektirir.Veri tabanı oluşumunda gerçekleştirdiğimiz sorgular LINQ To SQL sorgularıdır ve veri tabanı oluşumunda DBDataContext.cs sınıfı ile database modelini belirlenirken yani databasedeki tablolar,tabloların sahip olduğu sutunlar,yabancı anahtar vb. tanımlamaları yer alırken,ikinci olarak oluşturacağımız DBView.cs sınıfında da LINQ to SQL sorguları ve bu sorgularla oluşturacağımız ObservableCollection oluşumları,bu koleksiyonları kullanarak add,delete vb. metodları yer alacaktır.Bu veri tabanı metodları kullanılarak örneğin AddNewProduct vb. ile ileride oluşturacağımız sayfalarda ürün,liste,mağaza gibi elemanları veri tabanına ekleyip silebileceğiz.
Yeni bir Silverlight for Windows Phone projesi oluşturalım ve MyShopping olarak adlandıralım,proje yaratıldıktan sonra Solution Explorer’de projeye sağ tıklayarak Add Reference ile bazı  referansları projeye ekleyelim:

Add Reference->Browse ile karşımıza çıkan tab menüden  Microsoft.Phone.Controls.Toolkit.dll ‘yi ekleyelim artık Reference klasöründe  Microsoft.Phone.Controls.Toolkit.dll assembly ‘si gözükecektir. İkinci referansımız ise Add Reference ->.NET tabı dan  System.Data.Linq ‘i seçmek olacaktır. Aynı bölümden pivot sayfaları kullanabilmek için Microsoft.Phone.Controls  referansı da seçilerek projeye eklenir.
Bu işlemlerden sonra artık database modelimzi oluşturabilirz bunun için DBDataContext.cs sınıfını oluşturalım yine projemize sağ tıklayıp Add-> New Item diyerek bir class oluşturup ismini  bu şekilde belirleyelim. Sınıfı oluşturduktan sonra ilk olarak veri tabanı Connection String tanımlaması yapmalıyız. Daha sonra tablo tanımlamalarımızı yapıp tablo sütunlarını oluşturabiliriz.


   public class DBDataContext : DataContext
    {
        // Pass the connection string to the base class.
        public DBDataContext(string connectionString)
            : base(connectionString)
        { }

        //Table for shopping products
        public Table<TProduct> Products;

        // List of shopping products'
        public Table<TList> PLists;

        // Table for shopping products' store
        public Table<TStore> Stores;
    }


Bu tanımlamadan sonra sıra tablo sütunlarının sütun özelliklerini ve yabancı anahtarları belirlemeye gelir.
Ürünler tablosu için örnek sütun aşağıdaki şekilde yapılır ve bu  sütuna Primary Key,Not Null Identity gibi  özellikler de atanmıştır.


public class TProduct : INotifyPropertyChanged, INotifyPropertyChanging
    {

        private int _ProductId;

        [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
        public int ProductId
        {
            get { return _ProductId; }
            set
            {
                if (_ProductId != value)
                {
                    NotifyPropertyChanging("ProductId");
                    _ProductId = value;
                    NotifyPropertyChanged("ProductId");
                }
            }
        }



Tablonun diğer sütunları ve özellikleri  benzer şekilde tanımlanır.Ürünler tablosunda yer alan diğer sütunlar:
[Table]   TProduct
string ProductName
string ProductStore
decimal Price
bool IsLiked
int _PListId

benzer mantıkla Listeler tablosu ve Mağazalar tablosu da oluşturulur.Listeler tablosunda:
[Table]  TList
int Id
string Name
bool Checked

 kolonları vardır Mağazalar tablosunda mağaza Id ve ismi kolonları yer alır:

[Table]  TStore
int SId
string StoreName


Listeler tablosu ile Ürünler tablosu arasında yabancı anahtar(foreign key) ilişkisi vardır.Bu ilişki şu şekilde sağlanır.



İlk olarak TProduct tablosunda aşağıdaki ilişkilendirme yapılır:

[Column]
        internal int _PListId;

        private EntityRef<TList> _tlists;

        [Association(Storage = "_tlists", ThisKey = "_PListId", OtherKey = "Id", IsForeignKey = true)]
        public TList TListx
        {
            get { return _tlists.Entity; }
            set
            {
                NotifyPropertyChanging("TListx");
                _tlists.Entity = value;

                if (value != null)
                {
                    _PListId = value.Id;
                }

                NotifyPropertyChanging("TListx");
            }
        }


Bu tanımlamada TProduct tablosundaki int _PListId ile TList tablosundaki Id arasında bir yabancı anahtar ilişkisi oluştuğu belirtilir benzer şekilde TLists tablosunda aşağıdaki ilişkilendirme yazılır.


private EntitySet<TProduct> _plists;

        [Association(Storage = "_plists", OtherKey = "_PListId", ThisKey = "Id")]
        public EntitySet<TProduct> Mshop
        {
            get { return this._plists; }
            set { this._plists.Assign(value); }
        }



TList tablosunda buna ek olarak add ve remove işlemlerinde tablodaki verilerin senkronize olması için aşağıdaki kodlar gereklidir.

        // Assign handlers for the add and remove operations, respectively.
        public TList()
        {
            _plists = new EntitySet<TProduct>(
                new Action<TProduct>(this.attach_Mshop),
                new Action<TProduct>(this.detach_Mshop)
                );
        }


        // Called during an add operation
        private void attach_Mshop(TProduct Mshopx)
        {
            NotifyPropertyChanging("TProduct");
            Mshopx.TListx = this;
        }

        // Called during a remove operation
        private void detach_Mshop(TProduct Mshopx)
        {
            NotifyPropertyChanging("TProducts");
            Mshopx.TListx = null;
        }


Veri tabanını modelini bu sınıfla oluşturmuş olduk daha sonraki adımda veri tabanı görünümün için yeni bir sınıf oluşturacağız, görüşmek üzere ,iyi çalışmalar :)

Oluşturulan sınıf burada :)









1 yorum:

  1. Merhabalar,
    Vermiş olduğunuz bilgilerden dolayı teşekkür ederim. Yalnız ben bu DBDataContext.cs dosyasını kullanamıyorum. kodlar sürekli hata veriyor. örneğin; [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] satırını kullanmak istediğimde hata veriyor. bunu nasıl aşabilirim. şimdiden yardımlarınız için teşekkürler

    YanıtlaSil

Bottom Ad [Post Page]