Google da ara

 

Haziran 2009
Pts Sal Çar Per Cum Cts Paz
« May   Tem »
1234567
891011121314
15161718192021
22232425262728
2930  

Google Reklamları

Dil Seçimi

Bağış yada Ödeme

Nettiers – Custom Stored Procedure bastırmadan kullanma

Normalde Nettiers yazdığınız custom stored procedure leri kendi formatında yazdığınızda ilgili tablonun Provider ına eklemektedir. Ancak bir şekilde katman basılamıyor ise yada bastırmak istemiyorsanız. Yazdığınız procedureleri yine kullanabilirsiniz. Bunun için aşağıdaki gibi tabloProviderBase üzerinde bulunan Fill(..) methodunu ve DataRepository.Provider.ExecuteReader(..) methodunu birlikte kullanarak TList şeklinde bir sonuç elde edebilirsiniz.

YilmazYavuzCom.Data.Bases.YazilarProviderBase.Fill(
DataRepository.Provider.ExecuteReader(CommandType.StoredProcedure, "spDistictYazilar")
,new TList<Yazilar>(),0,1000);

Fill methodunda ilk parametre IDataReader tipinde ve bunu elde etmek için ExecuteReader(..) methodundan faydalanıyoruz. bu method bize istediğimiz procedure u çalıştırarak sonucu IDataReader tipinden döndürüyor.

İkinci parametre IDataReader dan aldığı değerleri ekleyeceği collection ı istemekte. Ben burda yeni bir collection oluşturup gönderiyorum.

Üçüncü parametre Reader üzerindeki kaçıncı elemandan eklemeye başlayacağını belirtiyor.

Dördüncü ise en son kaçıncı elemana kadar okuyacağını belirtiyor.

Methodun geri dönüş değeri ise TList<Yazilar> tipinde ve bizim gönderdiğimiz collection ı bize geri döndürüyor.

Nettiers – DeepLoad

Nettiers ile db den getirdiğiniz bir nesne örneği üzerinde ilk olarak sadece örneğin db deki tablosunda bulunan değerleri gelmektedir. Üzerinde BagliOlanTabloCollection yada KolonIdSource şeklinde propertyler normalde null ve sıfır elemanlı collection olarak gelmektedir.. Bunları doldurabilmek için DeepLoad(…) methodu ile ilgili nesneye deepload çekmemiz gerekmektedir. Bu işlem sadece veritabanından getirilmiş nesne örnekleri üzerinde çalışmaktadır. Yani yeni oluşturup id lerini doldurduğunuz bir nesneye deepload çekmeye çalıştığınızda Idsource lar dolmayacaktır.
Ayrıca kullanımı DeepSave den farklı olarak bir level sınırı olmayıp birden fazla alt alta bağlılıkları doldurabilmektedir.
Yani
Sayfa üzerinde KitapIdSource olsun Kitap nesnesi üzerindede RafIdSource olsun Raf üzerinde de KütüphaneIdSource.
Bunların hepsini tek bir DeepSave de kaydedemez iken tek bir DeepLoad ile doldurabiliriz.

Şu şekilde:

DataRepository.SayfaProvider.DeepLoad(sayfam,true);

Nettiers – Unable to use this part of the where clause in this version of Find:

Bu hatayı çok sık olmamakla beraber şu şekilde alabiliriz :
Katman bastırılırken windows un culture ı diyelimki İngilizce olsun, sonra katmanı kullanan bir yazılım diyelimki Turkce bir culture da çalışsın. Böyle bir durumda ; nettiers olası case sensitive lik sorununu çözebilmek adına Find(…) methoduna aldığı whereclause u ToLower() yaptığı için; bastırdığı zamanki ToLower() büyük I ları küçük i ye çevirirken çalışma anındaki ToLower() Türkçe culture olduğu için büyük I ları küçük ı ya çevirecektir. böylece aslında bizim yıllardır çalışan katmanımız , bir şekilde katman basılan makinedeki culture değişikliğinden dolayı proje patlaklar vermeye başlayacaktır.
Çözüm basittir çalışma ortamındaki culture ile katmanın basıldığı makinedeki culture ı herzaman için aynı tutmak.

Not: Windows forms projelerimizde Culture kullanıcının ayarlarından otomatik olarak alınmaktadır. Buda bizim işimizi zaman zaman bozabilir. Bunu önlemek adına programın main bloğuna aşağıdaki kodu ekleyerek projemizin çalışma anındaki culture ı kendimiz sabit bir değer olarak belirleyebiliriz.

            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("tr-TR");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("tr-TR");