Ö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.

 



Simple sql server management studio alternatifleri

clock Haziran 30, 2014 10:25 by author OzgurOzvaris

Merhaba,

Kaynak : http://stackoverflow.com/questions/5170/sql-server-management-studio-alternatives-to-browse-edit-tables-and-run-queries

Arkadaşlar bazen uygulama sunucunuzda sql server management studio olmayabilir. Bildiğiniz üzere bu tool free bir tool ancak indirmesi kurması zaman alıyor. Eğer acil olarak bir sunucuda sql bağlantısını test etmeniz gerekirse sizlere uzun zamandır böyle zamanlarda kullandığım Query Express isimli tool'u tavsiye ederim.

Buradan download edebiilirsiniz Query Express .

İyi çalışmalar.

 



Sqllite MSSQL bağlantısı

clock Haziran 26, 2014 16:03 by author OzgurOzvaris

Değerli Arkadaşlar,

Kaynak :

Creating a SQL Server Linked Server to SQLite to Import Data

SQLlite'ı hafife almamanızı tavsiye ederim. Adı lite olsada çok iş görüyor. Loglama sistemimiz tamamen ona emane etmiş durumdayız. Çok basit bir log tablosuna sürekli olarak log satırları yazdırıyoruz yaklaşık olarak günde 300.000 satırdan fazla log satırı yazıldığı oluyor. Ama hiç bir veri kaybımız olmadı. Sorunları yok değil ama loglama konusunda beklentimizi karşıladığını söylemelim.

İyi güzel logluyoruzda bu logları nasıl işleyeceğiz ve analiz edeceğiz. İşte burada lite olmasının sorunları başlıyor. Excel'e çıktı alması bizi 65bin küsür sınırı ile muhatap ediyor excel export adı altında yeni satır sınırı olmayan excellere export yapsada bu işlemi hem çok yavaş hemde açık olan excel'e satır satır eklemek gibi garip bir yöntem kullandığı için 100bin üzeri satırlada ciddi zaman kaybı oluyor. Asıl sorun bu değil asıl sorun sunucumuzda bu yöntemle açabileceği bir excel yüklü olmaması. Bu durumda iş parçalı olarak küçük excel'lere atılarak yapıloyor sonra bu exceller analiz için başka satır sınırı olmayan excelde birleştiriliyor bayağı uzun bir angarya.

Bu gün bir den bir ampul yandı kafamda. Ya dedim bu sql lite mssql ile bir bağlantı kuramazmı. Hemen karşıma olabileceğine dair linkler geldi. Bu linkteki adımları tek tek anlatmayacağım. Böyle böyle bir şeye ihtiyaç duyarsanız sizde bu adımları uygulayabilirsiniz.

http://www.mssqltips.com/sqlservertip/3087/creating-a-sql-server-linked-server-to-sqlite-to-import-data/

Öncelikle bir odbc driver kurmanız gerekiyor

http://www.ch-werner.de/sqliteodbc/

Sonra bu odbc driver'a konuda bahsedildiği gibi SystemDSN altına Add işlemiş kurduğunuz SQLLite 3 driver'ını kullanarak database'iniz bağlıyorsunuz.

Ardından sql server'a linked server olarak tanımlıyorsunuz.

USE [master]
GO
EXEC sp_addlinkedserver 
   @server = 'Mobile_Phone_DB_64', -- the name you give the server in SSMS 
   @srvproduct = '', -- Can be blank but not NULL
   @provider = 'MSDASQL', 
   @datasrc = 'Mobile_Phone_DB_64' -- the name of the system dsn connection you created
GO

Daha sonra sorgulamaya başlıyorsunuz :)

Select *
from openquery(Mobile_Phone_DB_64 , 'select * from db_notes')
GO

Select * into SQLite_Data -- This creates a table
from openquery(Mobile_Phone_DB_64 , 'select * from db_notes')
GO

Bu kadar basit.

İyi çalışmalar.



MSSQL Multi core kullanımı

clock Haziran 11, 2014 13:02 by author OzgurOzvaris

Değerli arkdaşlar ,

Microsoft SQL ile ilgili önemli sorunlarda bir taneside multicore'a karşılık performans artışı sorusu. Bu soru dipsiz bir kuyu gibi. En azından cpu lara tam erişebiliyormuyuz derseniz şu sorguyu kullanabilirsiniz.

Kaynak :

How many CPU cores can SQL Server use?

SQL SERVER – Measure CPU Pressure – CPU Business

Sql kaç cpu görüyor

select cpu_count from sys.dm_os_sys_info

Bu cpu lardan kaçı aktif durumda

select scheduler_id,cpu_id, status, is_online from sys.dm_os_schedulers where status='VISIBLE ONLINE'

Bu cpu'lar üzerindeki iş yükü nedir

SELECT
scheduler_id,
cpu_id,
current_tasks_count,
runnable_tasks_count,
current_workers_count,
active_workers_count,
work_queue_count,
pending_disk_io_count
FROM sys.dm_os_schedulers
WHERE scheduler_id < 255;

İyi çalışmlalar.



Plan Caching in SQL Server 2008, Forcing Query Plans

clock Haziran 4, 2014 11:05 by author OzgurOzvaris

Değerli Arkadaşlar,

Bu aralar sql performansı ile uğraştığımdan bahsetmiştim.

"Çok sayıda çalışan bir sorgunuz varsa herşey sorundur demektir."  Özgür Özvarış :) 04/06/2014

Kaynak

Plan Caching in SQL Server 2008

Forcing Query Plans

How to determine what is compiling in SQL Server

Amacımız çok çalışan sorgumuzun herseferinde çalışma planın derlenmesini engellemek. Şimdi birilerinin stored procedur yapın dediğini duyar gibiyim :) Ama bu sorgumuz o kadar zorlu bir sorguki araya giren where conditionları stored procedure dahi olsa yapıyı bozuyor.

Süreç uzun çalışan sorgularımda çok uzun compile süreleri görmemle başladı. Daha sonra How to determin what is compilin in SQL Server makalesinde söylendiği üzere profiler kriterlerme Perfomance aldınaki fieldları eklediğimde gerçekten her sorgumun ciddi manada derlendiğini gördüm. Şimdi sıra derlenmesi engellemek Plan Caching makalesinde geçen derlemelerin caclenmesi ve reuse edilmesi mevzuna geldi. Ancak sorgumuzu parametrik yamaktansa çok çalışan iki case için exceution planı force etmek daha çok işimizde geldi. Bizde Forcing Query Planda söylenen yöntem ile bu iki sorgu case'imizi force etmeye karar verdik.

Olurda force etmek isterseniz Quary Analizerdan excecution planla sorgunuzu çalıştırın. Save As XML deyin. direk makaledeki gibi eklemeyin içindeki iki yeri düzelmeniz gerekiyor Öncelikle ' karakterlerinin '' (iki tek tırnak yanyana) replace işlemini yapın. Ardından "StmtSimple" nodundaki "StatementText" Fieldını temizleyin şimdi sorunsuz eklenecektir.

İyi çalışmalar.

 

 



Mssql Lock Listesini alma

clock Haziran 3, 2014 12:58 by author OzgurOzvaris

Değerli arkadaşlar,

Bu aralar query performansla yine başım dertte. Yaklaşık olarak günlük 100000 adet alınan bir sorgunun optimize edilmesi ile uğraşıyorum. Şimdi sırada lock olan tablo vamı onları kontrol etmek geldi.

Kaynak :

Finding out which locks that are acquired in a query on SQL Server?

Understanding Locking in SQL Server

Where DeadLock details are stored in SQL Server 3 tane link vermiş güzeller

Deadlock bulamadım şimdilik. Ancak aşağıda verdiğim sorguyu çalıştırınca iki tablomda with(nolock) demediğimi buldum.

select 'Locks' as Locks,
    spid, nt_username, name, hostname, loginame, waittime, open_tran,
    last_batch, convert(varchar ,getdate() - last_batch, 114) as TimeSinceLastCommand,
    case req_mode
    when  0 then 'Not granted'
    when  1 then 'Schema stability'
    when  2 then 'Schema modification'
    when  3 then 'Intent shared'
    when  4 then 'Shared intent update'
    when  5 then 'Intent shared shared'
    when  6 then 'Intent exclusive'
    when  7 then 'Shared Intent Exclusive'
    when  8 then 'Shared'
    when  9 then 'Update'
    when 10 then 'Intent insert NULL'
    when 11 then 'Intent shared exclusive'
    when 12 then 'Intent update'
    when 13 then 'Intent shared-update'
    when 14 then 'Exclusive'
    when 15 then 'Bulk operation'
    else str(req_mode) end as LockMode
from master..syslockinfo
    left join sysobjects so on so.id = rsc_objid
    left join master..sysprocesses sp on sp.spid = req_spid
--where rsc_dbid = (select db_id()) and ltrim(req_mode) in (6,7,11,14)

Bu konuda birşeyler buldukça paylaşmaya devam edeceğim.

 

bu sorgu bu konuda baya işime yaradı.

 

 



mssql table index used size list

clock Mart 4, 2014 11:33 by author OzgurOzvaris
DECLARE CURGETTABLESIZE CURSOR FOR

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME 

OPEN CURGETTABLESIZE

declare @tablename varchar(100)

FETCH NEXT FROM CURGETTABLESIZE 

INTO @tablename
 

create table #TablesSize ( 

[name] nvarchar(128) NOT NULL,

[rows] char(11) NULL,

[reserved] varchar(18) NULL,

[data] varchar(18) NOT NULL ,

[index] varchar(18) NOT NULL ,

[unused] varchar(18) NOT NULL ,

)

create table #iTablesSize (

[name] nvarchar(128) NOT NULL,

[rows] int NULL,

[reserved]int NULL,

[data] int NOT NULL ,

[index] int NOT NULL ,

[unused] int NOT NULL ,

)

WHILE @@FETCH_STATUS = 0

BEGIN

insert into #TablesSize EXEC sp_spaceused @tablename

FETCH NEXT FROM CURGETTABLESIZE INTO @tablename

END

CLOSE CURGETTABLESIZE

DEALLOCATE CURGETTABLESIZE
 

--insert @iTablesSize select name, cast([rows] as int),cast(left(data,charindex('KB',data)-1) as int) ireserved, cast(left(data,charindex('KB',data)-1) as int) idata, cast(left([index],charindex('KB',[index])-1) as int) iindex, cast(left([unused],charindex('KB',unused)-1) as int) iunused from #TablesSize

insert #iTablesSize select name, cast([rows] as int),cast(left(data,charindex('KB',data)-1) as int) ireserved, cast(left(data,charindex('KB',data)-1) as int) idata, cast(left([index],charindex('KB',[index])-1) as int) iindex, cast(left([unused],charindex('KB',unused)-1) as int) iunused from #TablesSize

select * from #iTablesSize order by rows

drop table #TablesSize

drop table #iTablesSize


Full Text Search

clock Mart 4, 2014 11:11 by author OzgurOzvaris

Değerli Arkadaşlar,

Bu gün biraz fulltext search nasıl yapılır onu paylaşmak istiyorum.

Bu Linler ayrıca faydalı olacaktır

http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/

http://stackoverflow.com/questions/11616304/entity-framework-code-first-and-full-text-search

http://sqlblogcasts.com/blogs/simons/archive/2008/12/18/LINQ-to-SQL---Enabling-Fulltext-searching.aspx 

Öncelikli olarak her ihtimale karşı sistem enable duruma getirilir.

sp_fulltext_database 'enable'

Sonra FultextSearch cataloğu oluşturulur

CREATE FULLTEXT CATALOG [myFullText] WITH ACCENT_SENSITIVITY = ON

Katalog oluşturma ile ilgili detaylı bilgi için http://msdn.microsoft.com/en-us/library/ms189520(classic).aspx adresinden faydalanabilirsiniz.

Sıra indexin kolona atanmasına geldi

CREATE FULLTEXT INDEX ON TableName(ColumnName) KEY INDEX PK_Index ON myFullText;

Şimdi ColumnName ismi ile belirtilen kolona full index text search tanımlanmış oldu.

Sıra Full text Searchle ilgili bir kaç sorgulama örneği yapmaya geldi.

Bir kolon üzerinde FTS oluşturulunca artık o kolonla ilgili sorgulamalarda

  • FREETEXT
  • FREETEXTTABLE
  • CONTAINS
  • CONTAINSTABLE

Sorgu cümlelerini kullanabilmektesiniz.

Detaylı açıklama için http://www.developer.com/db/article.php/3446891/Understanding-SQL-Server-Full-Text-Indexing.htm linki güzel...

Detaylı örnekler için http://msdn.microsoft.com/en-us/library/ms187787(lightweight).aspx adresine bakabilirsiniz.

Ör 1 :

SELECT ProductName
FROM Products
WHERE FREETEXT (ProductName, 'spread' )

 

Sorgusu sonuç olarak

ProductName                             
----------------------------------------
Grandma's Boysenberry Spread Vegie-spread

(2 row(s) affected)

döner.
Ör 2.

SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, '"laugh*" NEAR lager')

Sonuç olarak

ProductName                             
----------------------------------------
Laughing Lumberjack Lager

(1 row(s) affected)

Değerlerini döner. Yukarıda detaylı örnekler var dediğim msdn linkinde çok güzel örnekler var ancak anladığım kadarı ile kuvvetli sogular ve geri dönüşler yapabilmek için biraz da uğraşıp döngüler ve birbirine ilave sorgu cümleleri kullanmak gerekiyor. yoksa mevcut uygulamalarla kıyaslanınca biraz temel örenekler gibi geldi.

Herkese Selamlar.



Hakkımızda  AboneOl 

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

Month List

RecentPosts

Sign In