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); }
}
// 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 :)
Merhabalar,
YanıtlaSilVermiş 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