Google da ara

 

Eylül 2010
Pts Sal Çar Per Cum Cts Paz
« Ağu    
 12345
6789101112
13141516171819
20212223242526
27282930  

Google Reklamları

Dil Seçimi

Bağış yada Ödeme

Sayfa 3 / 7«12345»...Son »

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");

Nettiers – Özelleştirme

Nettiers bastırdığı kodlar için size özelleştirme imkanı sunan bir templatedir.
Bastırılan her class ın kendi dosyası size bırakılmış bir superclass’dır. Ve içerisinde default contructor haricinde herhangi bir kod bulunmaz. Bu dosyalar Nettiers tarafından sadece bir kere basılır ve tekrar bastırdığınızda bu dosyalar eğer var ise overwrite yapılmaz.
Böylece siz bir entity class ı üzerinde yaptığınız değişiklikler db üzerinde bir değişiklik olup katman tekrar basıldığında korunmuş olur. Bu Tüm basılan kodlar için geçerlidir. EntityBase class ı dahil.
Windows forms projelerinden aşina olduğumuz şekilde nettiers projeler içerisinde bunları gruplandırır. Yani TabloAdi.cs tek bir dosya gibi görünürken yanında bulunan artıya tıkladığımızda TabloAdi.Generated.cs ve ITabloAdi.cs dosyalarıda altında görünür.
Nettiers ın bu özelliği ile Visual Studio ile bastırılan LINQ to Sql Classes dan çok daha kolay bir kullanıma sahiptir.
Ancak Bilmeniz gerekir ki bu tabloAdi class ların dışında bir class eklemeniz gerektiğinde yani Add New Item ile eklediğiniz bir dosya katman tekrar basıldığında nettiers tarafından algılanmayacak, katman basılma işlemi sonrasında Include In Project demeniz gerekecektir.

VmWare – Faild to lock file hatası

Sürekli kullandığım bir vmware sanal makinem dün gece üzerinde çalışan bilgisayarın resetlenmesi sonucunda haliyle kapanmıştı, bugün tekrar açmaya çalıştığımda bu hatayı aldığımı gördüm. Ufak bir google araştırmasıyla sonu lck ile biten klasörleri sildiğimde düzeleceğini keşfettim ve olmuştu.

kaynak

TFS – Workspace

Workspace adındanda malumunuz çalışma ortamı anlamına gelir. TFS ile çalışırken Server tarafında tek olan dosya yada klasörler clientlarda çalıştırılabilmek için bir çalışma ortamı isterler. Genelde ilk projeyi getlatest dediğinizde size nerelere koyayım bunca dosyayı diyerekten sorar işte bu workspacedir.
Ancak sonraları siz çalışma ortamınız kirlendiğinde yeni bir çalışma ortamı oluşturmak isteyebilirsiniz. Bunun için Team Explorer üzerindeki Source control üzerine çift tıklayıp Source Control penceresine erişelim. Sonra üst kısımda bulunan “Workspace:” yazan yerden Manage workspace seçelim. Gelen ekranda yeni workspaceler ekleyebilir eskilerini düzenleyebilirsiniz.

Kullanım alanı için örnek olması açısından:
Bir workspace de çalışırken Tfs command prompt dan yanlış birşeyler yaptım ve geride alamadım Bir klasör ne kadar uğraştıysam source control üzerinden erişilemez hale geldi. sonuç olarak yeni bir workspace oluşturarak diğer workspace imden dosyalarımı check-in ledim ve yenisinde get latest dedim. Ve çalışmama kaldığım yerden tam hız devam edebildim.

Redgate Reflector – .Net Yazılımcısının korkulu rüyası

screenshot_full_screen

.Net bildiğiniz gibi yazdığımız kodları ara bir dile çevirerek framework tarafından bu dil ile anlaşmakta ve makine diline çalışma anında çevrilmektedir. Bu çok dilli ve platform bağımsız (!) olması için geliştirilmiş bir mimari olsada, çok kolay tersine mühendislik yapılabilmesine de imkan sağlamakta.
Kısaca özetlemek gerekirse; .Net platformunda yazdığınız bir proje : windows app. ,class library, yada derlenmiş asp.net sitesi olsun. Reflector kullanılarak çok kolay bir şekilde kodları geri getirilebiliyor. Bunu herhangi bir .net programını hacklemek yada kodlarını çalıp yeni bir proje geliştirmek için kullanabileceğimiz gibi, source code unu kaybettiğimiz bir projeyi exe yada dll halinden geri getirebilmemizide sağlıyor.
Reflector kullanımı çok basit kurulum gerektirmeden direk çalıştırılabilen bir yazılım. Redgate firması tarafından ilk sahibi olan Ruts Loeder den satın alınmış ve ücretsiz olarak sunulmaktadır.
Şu adres üzerinden ulaşabilirsiniz.
Ayrıca program tek başına sadece size kodları istediğiniz .Net diline çevirirken eklentileriyle birlikte, kodları derlenebilecek Visual Studio projeleri halinede kolaylıkla getirebiliyorsunuz.

Internet Explorer 8 Reference Accelerator yapmak

Visual Studio 2010 ile gelen Online template olayına değindik az önce, şimdi orda görüpte yazmadan edemiyeceğim birşeyden bahsetmek istiyorum; IE 8 ile birlikte gelen ve kolay birşekilde geliştirilebilen hızlandırıcılardan bahsedeceğim. Öncelikle eğer VS2010 unuz var ise direk ordan yok ise ekte bulunan dosyaları kullanarak işlemi gerçekleştirebileceğinizi söyleyeyim.

Hızlandırıcı dediğimiz şey kısaca IE ye yeni arama alanları eklemenize yarıyor, örnek olarak yilmazyavuz.com üzerindeki yazılarda arama yapan bir hızlandırıcı yazalım.

VS2010 üzerinde bulunan Online Templates den Csharp için olan (VB de olabilir çok farketmeyecektir) IE8 Accelerator templatetinden bir proje oluşturalım. oluşturduğumuz template içerisinde bulunan Accelerator.xml dosyasının içine geçelim.

<?xml version="1.0" encoding="UTF-8"?>
<os:openServiceDescription
  xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
  <os:homepageUrl>http://msdn.microsoft.com</os:homepageUrl>
  <os:display>
    <os:name>Find on MSDN</os:name>
    <os:description>Find on MSDN</os:description>
    <os:icon>http://msdn.microsoft.com/favicon.ico</os:icon>
  </os:display>
  <os:activity category="Reference">
    <os:activityAction context="selection">
      <os:preview action="http://search.msdn.microsoft.com/Default.aspx?Query={selection}#ctl00_MainContent_resultsView_ResultsContainer" />
      <os:execute action="http://search.msdn.microsoft.com/Default.aspx?Query={selection}#ctl00_MainContent_resultsView_ResultsContainer" method="get">
      </os:execute>
    </os:activityAction>
  </os:activity>
</os:openServiceDescription>

Şeklinde bir Xml dosyasıyla karşılaşacağız, burda öncelikle üstten başlayarak kendimize uyarlayalım:

<os:homepageUrl>http://www.yilmazyavuz.com</os:homepageUrl>

Şeklinde hızlandırıcımızın ana sayfasını yilmazyavuz.com olarak değiştiriyoruz.

Sonra sırasıyla name , description ve icon kısımlarını aşağıdaki gibi değiştiriyoruz.

<os:name>YY.com da Ara</os:name>
<os:description>Yılmaz Yavuz.com üzerinde ara</os:description>
<os:icon>http://yilmazyavuz.com/yyblog/yy.ico</os:icon>

Son olarakta asıl önemli olan kısma geliyoruz, aramamızın yapılacağı ve önizlemenin göstereceği adresleri belirtmeye :

<os:preview action=”http://www.yilmazyavuz.com/yyblog/?s={selection}#content” />
<os:execute action=”http://www.yilmazyavuz.com/yyblog/?s={selection}#content” method=”get”>

Burda preview kısmında IE8 üzerinde seçili bir yazıya sağ tıklayıp bizim hızlandırıcımız üzerine gelindiğinde çıkacak olan ufak pencerenin göstereceği URL i belirtiyoruz. Örnekte blog üzerinde arama yapan adresi verdim {selection} kısmı ise IE8 in göndereceği parametreyi ifade ediyor. #content ise sayfa üzerinde hangi Div yada Asp.net için panel üzerine yoğunlaşacak ise onun id kısmında yazan değeri yazıyoruz. Örneğimizdeki #content bir div e ait ve wordpress arama sayfasının içerik kısmını temsil ediyor. aynı şekilde aramanın gideceği adres değişmeyeceği için execute kısmınada aynı adresi kopyalıyoruz.

F5 e basarak website projemizi IE8 üzerinde açıyoruz ( default browseriniz IE8 dışında bir şey ise lütfen adresi kopyalaıp IE8 üzerinde çağırınız). Gelen sayfadaki butona tıklayıp gelen pencereden Install komutunu vererek hızlandırıcımızın kurulmasını sağlıyoruz.

yeni IE8 ile artık blogumuz üzerinde kolay bir şekilde arama yapabilir hale geldik :)

IE8Accelerator

Nettiers – DeepSave

Table provider lar üzerinde bulununan DeepSave methodu, bir entity üzerindeki FK lar için otomatik oluşturulmuş ColumnNameSource ve TableNameCollection propertyleri içine girilen verileri kaydetmek için kullanılan methoddur.

Örnek olarak Kitap entity si üzerinde SayfaCollection olsun. Yeni bir Kitap istance ı oluşturup SayfaCollection ı dolduralım. Ve bunları kaydetmek için DeepSave Methodunu kullanalım. DeepSave methodu burda KitapProvider üzerinden kullanılmalı ve parametre olarak Kitap instance ı verilmelidir.
Bu methodda bulunan opsiyonel parametreleri doldurarak isteğe bağlı tipteki verilerin kaydolmasınıda sağlayabiliriz. Yani Kitap üzerinde diyelim ki YazarIdSource şeklinde bir alanda bulunsun ve buda Yazar tablosu tipinden olsun. Eğer biz DeepSave yaparken yazar ı kaydetmek istemezsek DeepSaveType.ExcludeChildren parametresini ve sonrasında ise typeof(Yazar) yazıp Yazar tipinden propertylerin kaydedilmemesini sağlayabiliriz. Ya da sadece SayfaCollection tipinden verilerin kaydedilmesini istiyorsak bu seferde DeepSaveType.IncludeChildren parametresi ve sonrasında typeof(TList<Sayfa>) şeklinde SayfaCollection ın tipini yazarak bunu sağlayabiliriz.

Kitap ktp = new Kitap();
ktp.Adi ="Her yönüyle C#";
ktp.YazarIdSource = new Yazar();
ktp.YazarIdSource.Adi ="Sefer Algan";
ktp.SayfaCollection.Add(new Sayfa());
ktp.SayfaCollection[0].Bolum = 1;
ktp.SayfaCollection[0].Etiketler = "giris,tanitim";

DataRepository.KitapProvider.DeepSave(ktp,DeepSaveType.IncludeChildren,typeof(TList{Sayfa})); //Burdaki işaretler küçüktür büyüktür işaretleri olacak (Generic) ancak sitedeki eklentide bir problem olduğu için bu şekilde yazıyorum
//yada
DataRepository.KitapProvider.DeepSave(ktp,DeepSaveType.ExcludeChildren,typeof(Yazar));

EncoderFallbackException: Unable to translate Unicode character

EncoderFallbackException: Unable to translate Unicode character \uD9F5 at index 4 to specified code page.]
System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index) +156
System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars) +267
System.Text.UTF8Encoding.GetByteCount(Char* chars, Int32 count, EncoderNLS baseEncoder) +2827429
System.Text.UTF8Encoding.GetByteCount(String chars) +45
System.IO.BinaryWriter.Write(String value) +38

….

Şeklinde bir hatayı aylardır sorunsuz çalışan bir Asp.Net 2.0 web sitemizde aldık, öncelikle IIS i restart ederek sorunun giderilmiş olacağını düşündük ancak herhangi bir gelişme olmadı. Sonra hata veren yerdeki kodlarla ilgili bir kaç düzenleme yaptık fakat yine herhangi bir gelişme olmamıştı.

En son hatalar Access Denied boyutuna ulaşınca Asp.Net Temporary Files klasörünü boşaltmayı denedim ancak, hep bir iki dosya silinemiyor ve dosya kullanımda hatası alıyordum. En son çare olarak IIS in bulunduğu serveri restart ettim ve herhangi bir problem kalmadı. Daha önce benzer durumu local de çalışan bir server üzerindeki, file system de bulunan dosyaları network üzerinden birden fazla kişi aynı anda kopyalarken üzerine yazmaya çalıştığımızda almıştık. Ve hiç bir şekilde işletim sistemini yeniden başlatmadan sorun giderilemiyordu.

Sayfa 3 / 7«12345»...Son »