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

3 comments to Nettiers – DeepSave

  • Alp

    .netTiers üzerine sen yaz, okuyan olur mutlaka (en azında ben okurum, deepsave netTiersin gerçekten kullanışlı ve iş gören bir özelliği,)
    Doğrusu hiç düzenli blog takip etmem ancak bu blogu izleyeceğim.

    Şimdi müsadenle bir soru ;
    netTiersin kendi _tablename_method vs. şeklindeki sp üretmesininde haricen,, db de var olan spleri (bunlarin adlarini uygun formata çevirsek) nasıl kullanacağız. Aslinda bir az önce bir makaleye rastladim ama pek tatmim edici değildi.

    Hali hazırda var olan sp leri direct koddan adıyla gostererek çalıştırma yontemi sanırım yok. Ya da var ve bulamadim mi.?

    5 tablodan selectli formullu joinli bir sp var ve dataset döndürüyor, adı spCost_xxxx olsun ve bunu da codları generated ettikten sonra DB ye eklemiş olalim.
    Bu sp yi çağırmka mumkun mu mumkunse nasil ?

    Kısa da olsa bir bilgi işime yarar dogrusu.
    ve yeni projeye netTiersle girip giremeycegim de aslinda ozel sp lerin kullanım imkanına bağlı.

    netTiers makalelerine teşekkürler,

  • Yılmaz Yavuz

    Özel spleri eğer DataSet yada Reader ile kullanıcaksan tabikide DataRepository.Provider.ExecuteDataSet(…) kullanabilirsin burda sp alan bir overload u mevcut. Geriye dataset döndürüyor. Ayrıca benzer şekilde DataRepository.Provider.ExecuteScalar yada ExecuteNonQuery kullanabilirsin ihtiyaca göre. Burda sp adını yazıp params object[] tipinde sp nin parametrelerini yazabiliyorsun.

  • Yılmaz Yavuz

    Ayrıca bahsettiğin üzere _TABLOADI_METHODADI şeklinde bir isimlendirme verirsen SP lere DataRepository.TABLOADI.METHODADI(…) şeklinde bir method oluşturacaktır. Tabiki bunun için tekrar katmanı bastırman gerekliliği sözkonusu, eğer ilgili sp nin geri dönüş değeri TABLOADI tablosunun tüm kolonlarını içeriyor ise methodun geri dönüş değeri TList şeklinde olacaktır, Tüm kolonlarını içermiyor ise geri dönüş değeri DataSet olacaktır.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">