Aracılığıyla paylaş


Sorun giderme

Aşağıdaki bilgiler, LINQ to SQL uygulamalarınızda karşılaşabileceğiniz bazı sorunları ortaya çıkarır ve bu sorunların etkisini önlemek veya başka bir şekilde azaltmak için öneriler sağlar.

Ek sorunlar Sık Sorulan Sorular bölümünde ele alınıyor.

Desteklenmeyen Standart Sorgu İşleçleri

LINQ to SQL tüm standart sorgu işleç yöntemlerini (örneğin, ElementAt) desteklemez. Sonuç olarak, derlenen projeler yine de çalışma zamanı hataları üretebilir. Daha fazla bilgi için bkz. Standart Sorgu İşleci Çevirisi.

Bellek Sorunları

Sorgu bir bellek içi koleksiyon ve LINQ to SQL Table<TEntity>içeriyorsa, sorgu, iki koleksiyonun belirtilme sırasına bağlı olarak bellekte yürütülebilir. Sorgunun bellekte yürütülmesi gerekiyorsa, veritabanı tablosundaki verilerin alınması gerekir.

Bu yaklaşım verimsizdir ve önemli bellek ve işlemci kullanımına neden olabilir. Bu tür çoklu etki alanı sorgularından kaçınmaya çalışın.

Dosya Adları ve SQLMetal

Bir giriş dosyası adı belirtmek için, adı giriş dosyası olarak komut satırına ekleyin. Bağlantı dizesine dosya adını dahil etme ( /conn seçeneği kullanılarak) desteklenmez. Daha fazla bilgi için bkz. SqlMetal.exe (Kod Oluşturma Aracı).

Sınıf Kitaplığı Projeleri

Nesne İlişkisel Tasarımcısı, projenin dosyasında bir bağlantı dizesi app.config oluşturur. Sınıf kitaplığı projelerinde app.config dosya kullanılmaz. LINQ to SQL, tasarım zamanı dosyalarında sağlanan Bağlantı Dizesini kullanır. değerinin app.config değiştirilmesi, uygulamanızın bağlandığı veritabanını değiştirmez.

Bağlantılı Silme

LINQ to SQL, art arda silme işlemlerini desteklemez veya tanımaz. Tabloya karşı kısıtlamaları olan bir satırı silmek istiyorsanız, aşağıdakilerden birini yapmalısınız:

  • ON DELETE CASCADE Kuralı veritabanındaki yabancı anahtar kısıtlamasında ayarlayın.

  • Önce üst nesnenin silinmesini engelleyen alt nesneleri silmek için kendi kodunuzu kullanın.

Aksi takdirde, bir SqlException özel durum oluşturulur.

Daha fazla bilgi için bkz . Nasıl yapılır: Veritabanından Satır Silme.

İfade Sorgulanamaz

"İfade [ifade] sorgulanamaz; bir derleme referansı mı eksik?" hatasıyla karşılaşırsanız, aşağıdaki adımları kontrol edin ve emin olun:

  • Uygulamanız .NET Compact Framework 3.5'i hedef alıyor.

  • System.Core.dll ve System.Data.Linq.dll için bir referansınız var.

  • Visual Basic (vb) veya C# (C#) için System.Linq ve System.Data.Linq yönergeniz var.

DuplicateKeyException

SQL projesindeki LINQ'de hata ayıklaması yaparken, bir varlığın ilişkilerini incelemeniz gerekebilir. Bunu yaptığınızda bu öğeler önbelleğe alınır ve LINQ to SQL bunların varlığını fark eder. Attach veya InsertOnSubmit gibi aynı anahtara sahip birden çok satır üreten bir yöntemi yürütmeyi denerseniz, bir DuplicateKeyException fırlatılır.

Dize Birleştirme İstisnaları

[n]text ve [n][var]char ile eşlenen işlenenlerde birleştirme desteklenmez. İki farklı tür kümesine ait dizelerin birleştirildiği durumda bir istisna atılır. Daha fazla bilgi için bkz. System.String Methods.

SQL Server 2000'de Özel Durumları Atlama ve Alma

SQL Server 2000 veritabanına karşı Take veya Skip kullanırken kimlik üyelerini (IsPrimaryKey) kullanmanız gerekir. Sorgu tek bir tabloda (birleştirme değil) veya bir Distinct, Except, Intersectveya Union işlemi olmalı ve bir Concat işlem içermemelidir. Daha fazla bilgi için Standart Sorgu Operatörü Çevirisi'nin "SQL Server 2000 Desteği" bölümüne bakın.

Bu gereksinim SQL Server 2005 için geçerli değildir.

GroupBy InvalidOperationException

Bu özel durum, GroupBy gibi bir ifadeye göre gruplandırılan bir boolean sorguda group x by (Phone==@phone) sütun değeri null olduğunda oluşturulur. İfade bir boolean olduğundan, anahtar boolean olarak değil, nullableboolean olarak çıkarılır. Çevrilen karşılaştırma null ürettiğinde, nullableboolean nesnesini boolean öğesine atamaya çalışılır ve bu sırada bir özel durum atılır.

Bu durumdan kaçınmak için (null değerleri false olarak işlemek istediğinizi varsayarak), aşağıdaki gibi bir yaklaşım kullanın:

GroupBy="(Phone != null) && (Phone=@Phone)"

OnCreated() Kısmi Yöntemi

Nesne oluşturucu her çağrıldığında, oluşturulan yöntem OnCreated() çağrılır; bu, LINQ to SQL'in özgün değerler için bir kopya oluşturmak amacıyla oluşturucuyu çağırdığı senaryoyu da içerir. Kendi kısmi sınıfınızda OnCreated() yöntemini uygularsanız, bu davranışı dikkate alın.

Ayrıca bakınız