Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

Entity Framework Join

clock Eylül 3, 2014 12:37 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynak,

Entity Framework Query for inner join

Entity Framework Join 3 Tables

Entity Framework LINQ joining 5 tables on multiple columns (impossible?!)

Joining tables using more than one column in Linq To Entities

The type arguments cannot be inferred from the query...

Bazen database tarafında tablolar birbiri ile ilişkili olmadığında yada daha esnek conditionlar eklemek istediğinizde (ilişkili ve derinlerdeki tablolara condition eklemek istediğiniz durumlar gibi) EF'ün "Join" komutuna ihiyaç duyabilir siniz.

 Güzel bir örnek olmasından dolayı kaynaklar'dan birinde geçen örneği paylaşıyorum.

from s in db.Services
join sa in db.ServiceAssignments on s.Id equals sa.ServiceId
where sa.LocationId == 1
select s

Eğer birden fazla kolon joinlemek isterseniz...

var match = from t1 in context.cKNA1
             join t2 in context.cKNB1 on 
                    new { t1.KUNNR, t1.RowId } equals 
                    new { t2.KUNNR, t2.RowId }
             join t3 in context.cKNVV on 
                    new { t2.KUNNR, t2.RowId } equals 
                    new { t3.KUNNR, t3.RowId }
             join t4 in context.cKNVH on 
                    new { t3.KUNNR, t3.RowId } equals 
                    new { t4.KUNNR, t4.RowId }
    SELECT t1.KUNNR;


Yada ikinci bir syntax olarak...

from a in Table1s 
from b in Table2s
where a.ID1Table1 == b.ID1Table2 && a.ID2Table1 == b.ID2Table2
select new {a.ID1Table1, a.ID2Table1, a.Value1Table1, b.ID3Table2, b.Value1Table2}


Eğer yapılan join işlemlerinde field isimleri birbirini eşit değilse "The type arguments cannot be inferred from the query..." alabilirsiniz. Böyle bir durumda "new" komutu ile oluşturduğunuz class alanlarına ortak isimler vermelisiniz.

join inventory in Models.Inventories on new
{
	Supplier = equivalency.EquivalencySupplier,
	Part = equivalency.EquivalencyPart
} equals new
{
	Supplier = inventory.Supplier,
	Part = inventory.Part
}

 

İyi çalışmalar.



Entity Framework'e Giriş

clock Eylül 3, 2014 11:47 by author OzgurOzvaris

Merhaba Arkadaşlar,

Entity Framework (EF) ile ilgili pek yazı kaleme almadım. Aslında bu tarafta hatırı sayılır miktarda Entitiy Framework tecrübesi birikti. Sizlerle ara ara bunlarıda paylaşmaya çalşacağım. Aslında bu yazıda "Entity Framework Join" konusuna deyinecektim ancak bu vesile ile biraz Entity Frame work'un genel konularına değineyim.

Entity Framework emsalleri ile karşılaştırılınca gerçekten bambaşka bir dünya. Bazen insanı çılgına çevirecek kadar zor, bazende ya bunuda mı yapıyor helal olsun bu adamlara diyecek kadar tatminkar. Bazende bunu nasıl hâlâ eklememişler diyecek kadar sizi üzen, sürekli size karma karışık duygular yaşatan, sürekli gelişen bir sistem. Zaten 6.0 versiyonunu görmesi ve hala hızla gelişmeside buna en basit örnek.

Ayrıca hâlâ güçlü bir yazılımının data katmanı EF ile geliştirilebilir mi diye piyasada ciddi endişeler var. Kabul elmek gerek ki "SQL" database ile kurulan çok ciddi bir iletişim yöntemi ve belkide EF hiçbir zaman onun kadar güçlü olamayacak. Ancak sql ve EF'ü kıyaslamak bana adil gelmiyor. EF gücünü sistemlerinden (Code First, Design First, Database First, POCO vb. ) alıyor. EF adeta kıyas edersek yazı dünyasındaki Word uygulaması yolun da gidiyor, sql ise database dünyasının karakalemi gibi. Sql'de varyasyonlar bir hayli çoğalmış durumda tabi ki EF'de varyasyonlar o kadar çok değil.

Entitiy Framework'te doğru synax ve doğru sql çıktısı çok önemli. Gerçekten çok güçlü bir yapı. Ancak sadece yazdım bitti diyemiyorsunuz. Bir şekilde alışana kadar sql profiler'dan ve ya başka şekillerde EF'ün efektif SQL cümleleri üretip üretmediğini kontrol etmeniz gerekiyor.

Aslında bu makaleye "Entity Framework Join" demiştim ancak yazı başka yöne doğru gidince başlığı şimdiki başığa çevirdim.

Birazdan "Entity Framework Join" makalemide yayınlayacağım inşallah.

Herkese iyi çalışmalalar.



Sql Server free profiler

clock Eylül 3, 2014 11:12 by author OzgurOzvaris

Merhaba Arkadaşlar,

sql le uğraşan herkesin arada bir gönlünden geçmiştir. Acaba free bir query tool'y varmıdır, free bir profiler tool'u varmıdır diye.

Daha önce free query tool'unu paylaşmıştım.

Simple sql server management studio alternatifleri

Bu gün ise free bir profiler paylaşıyorum

ExpressProfiler

Umarım faydalı olurlar.

İyi çalışmalar.

 



Test Automation tool

clock Ağustos 18, 2014 18:17 by author OzgurOzvaris

Merhaba,

Geçen gün güzel bir sunuma katıldım. Test automation tollardan özellikle şu ikisi aklımda kaldı sizlerle de paylaşayım.

jmeter

http://jmeter.apache.org/

Bir ara bende stress testi için bu tool'u kullanmış ve windows ortamına uyarlamıştım. Konu ile ilgili makalem http://www.ozgurozvaris.com/post/2014/02/14/Jmeter.aspx

Bir diğer tool'da

Selenium

http://www.seleniumhq.org/

atrium isimle bir ara programlar çok güzel android testleride yapabiliyormuş. Adroid sdk emulatorunun çok yavaş olduğu ile ilgili bir ayrındı öğrendim bunun için bir intel driver kuruluyormuş.

Bende uyanan en önemli intiba. Test otomasyonu ciddi bir işmiş dedim.

İyi çalışmalar.

 



.Net popüler Dependecy Injection Tools

clock Ağustos 18, 2014 18:10 by author OzgurOzvaris

Merhaba,

Son json size limit problemi ile birlikte .Net dünyasında ki popüler bir kaç dependecy injection tool'u anmak gerektiğini düşündüm.

Ninjet

http://www.ninject.org/

Unitiy

http://msdn.microsoft.com/en-us/library/ff647202.aspx

http://blogs.unity3d.com/2014/05/07/dependency-injection-and-abstractions/

https://unity.codeplex.com/

Stracture Map

http://docs.structuremap.net/

Bu da gogole biraz bakınırken gördüğüm java dünyası için güzel bir makale :)

Inversion of Control Containers and the Dependency Injection pattern

 



MVC Json size limit

clock Ağustos 18, 2014 17:40 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynaklar :

Web.config jsonSerialization maxJsonLength ignored

ASP.Net MVC4 - Setting the Default JSON Serializer

Using JSON.net as default JSON serializer in ASP.NET MVC 3 - Is it possible?

Using StructureMap to inject Controller and Attribute Dependencies *****

Bu günkü konumuz yüksek size'lı bir json datasını client tarafında göndermeye çalıştığınızda aldığınız 500 - Internal Server Error ile ilgili. Kaynaklardan gördüğünüz gibi çözmek biraz zorladı.

Event Viewer'da Application Errorlara baktığınızda hata açık olarak şu şekilde yazılıyor

Error during serialization or deserialization using the JSON JavaScriptSerializer. 
The length of the string exceeds the value set on the maxJsonLength property

Yani sorunun JavaScriptSerializer'ın size limiti ile olduğu çok açık. Ancak bu limit'i nasıl kaldırabilceğimiz ile ilgili türlü türlü bilgilerden doğru bilgiye uğraşmak kolay olmadı. Bazıları sorunun browser limitlerinden kaynaklandığını söylemiş, bazıları web config'e ekkleyeceğini bazı taglar ve limit değerleri aşılabileceğini söylemiş vs. Bende ne yazıkki bunlardan sadece kod tarafından MaxJsonLength ile ilgili değeri set etmeliniz tavsiyesi bir ışık oldu.

Ancak jsonresult dönen bir class da bu değeri set etmek verilen örnekteki kadar kolay değil öncelikle json result'ı customize etmek gerekti. Customize ettiğim jason result'ı handle edebilmesi için controllerInvoker class'ına dependecy injection yapmak gerek ti tabi bu işler ağızdan çıktığı kadar kolay değil. Örneğin ben dependecy injection tool olarak stracture map kullanıyorum Stracturemap ile sorunsuz olarak controller classlarına default parametreler geçebiliyorum ancak bu sefer daha derinlere bir injection yapmak gerekli bunun için daha ileri bir kodlama gerekiyor.

Kaynakları inceldeğinizde ExtensibleActionInvoker ile ilgili örnek (**** eklediğim) stracture map üzerine olduğu için birebir benim sorunumu çözdü.  Sadece nuget ile  Reactive Extension (RX) tool u kurdum. Yeni versiyonlarda run komutu gitmiş yerine ForEach gelmiş onu çözmek için de

filters.ToObservable().ForEach

komutu kullanmak gerekti. Bu vesile ile daha önce projemde kullandığım ControllerFactory çok daha güzel bir yapıya kavuştu. Bu yapıda örnekte anlatıldığı üzere ihtiyaç olursa çok daha orjinal attributelar kullanabileceğim.

İyi çalışmalar.



Sqlite int to real

clock Temmuz 22, 2014 11:15 by author OzgurOzvaris

Merhaba,

Kaynak : converting int to real in sqlite

Sqllite sql de bir sayıyı başka bir sayıya bölerseniz sonun integer'a göre yuvarlıyor. Bunu engellemek için üzerinde işlem yapmak istediğiniz sayıyı "1.0" ile çarmak gerekiyor.

SELECT something*1.0/total FROM somewhere

İyi çalışmalar.



Sql Lite EXPLAIN QUERY PLAN

clock Temmuz 22, 2014 10:40 by author OzgurOzvaris

Merhaba Arkadaşlar,

Zorlu bir sorgu denememde sql lite da soğru indexlemeleri yapmanın ne kadar önemli olduğunu bir kere daha anladım.

sql lite da bir sorgunun hangi yoldan geçtiğini öğrenmek yani indexleri kullandığını öğrenmek için

EXPLAIN QUERY PLAN [SQLite Query]

Komutunu kullanmanız gerekiyor.

İyi çalışmalar.



SqlLite Truncate Table

clock Temmuz 21, 2014 18:13 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynak : http://www.tutorialspoint.com/sqlite/sqlite_truncate_table.htm

Sqllite databaseinde truncate table komutu yok onun yerine şöyle yapabilirsiniz.

DROP TABLE table_name;

Peşinden de

VACUUM;

şeklinde shirink yaparsanız aynı işi yapacaktır...

İyi çalışmalar.



Sqlite Attach db

clock Temmuz 21, 2014 13:09 by author OzgurOzvaris

Merhaba Arkadaşlar,

kaynak : http://www.tutorialspoint.com/sqlite/index.htm 

Farkındasınızdır sürekli odak noktam değişiyor. Aslında bunu belirleyen o anki ihtiyaçlar. Yoksa sadece merak değil emin olabilirsiniz :)

Sqlite her geçen gün işimizin bir parçası olmaya devam ediyor. Kolay üretilebilmesi, kolay kopyalanabilmesi, ACID yapısına uygunluğu avantajları gerçkten hiçte az değil. Tabi hala çözemediğimiz sorunlarıda var bunlardan bir tanesi "table lock". Yoğun insert yaptığınızda database'den eğer uzun sürecek bir select cümlesi isterseniz insert cümleleri sql cümlesinin bitmesini bekliyor. Bu sorunuda aşacağımı umuyorum. Şuan ciddi bir sorun bizim için. Baktım bir şeyler var gibi ancak zaman ayıramadım.

Neyse konumuza dönersek. Sqlite dabase leri birine eklenebiliyor ve ortak olarak sorgulabiliyor ve işlem yapılabiliyor. Bunun için şu komut setini sqlite admin yada sql lite consolundan kullanabilirsiniz.

attach 'driver:\directory_path\SqlLogTmp.s3db' as 'TempLogDB'

 Ekleyip eklemediğini kontrol etmek için

PRAGMA database_list;

Çıkarmak için

detach database  TempLogDB

Komutlarından faydalanabilirsiniz.

Attach Ettiğiniz db yi sorgulamak isterseniz aşağıdaki örnek faydalı olacaktır.

select * from TempLogDB.TableName

Yada içine toplu kayıt atmak isterseniz size bir örnek daha...

Insert Into TempLogDB.SimpleLog Select * from SimpleLog 
where rowid between 7195251 and 7507051 order by rowid desc

İyi çalışmalar.

 



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In