Bagikan melalui


Troubleshooting

Informasi berikut memaparkan beberapa masalah yang mungkin Anda temui di LINQ Anda ke aplikasi SQL, dan memberikan saran untuk menghindari atau mengurangi efek masalah ini.

Masalah tambahan dibahas dalam Tanya Jawab Umum.

Operator Kueri Standar yang Tidak Didukung

LINQ ke SQL tidak mendukung semua metode operator kueri standar (misalnya, ElementAt). Akibatnya, proyek yang dikompilasi masih dapat menghasilkan kesalahan runtime. Untuk informasi selengkapnya, lihat Terjemahan Operator Kueri Standar.

Masalah Memori

Jika kueri melibatkan koleksi dalam memori dan LINQ ke SQL Table<TEntity>, kueri mungkin dijalankan dalam memori, tergantung pada urutan kedua koleksi ditentukan. Jika kueri harus dijalankan dalam memori, maka data dari tabel database perlu diambil.

Pendekatan ini tidak efisien dan dapat mengakibatkan penggunaan memori dan prosesor yang signifikan. Cobalah untuk menghindari kueri multi-domain tersebut.

Nama File dan SQLMetal

Untuk menentukan nama file input, tambahkan nama ke baris perintah sebagai file input. Menyertakan nama file dalam string koneksi (menggunakan opsi /conn ) tidak didukung. Untuk informasi selengkapnya, lihat SqlMetal.exe (Alat Pembuatan Kode).

Proyek Pustaka Kelas

Object Relational Designer membuat string koneksi di dalam berkas app.config proyek. Dalam proyek pustaka kelas, app.config file tidak digunakan. LINQ ke SQL menggunakan connection string yang disediakan dalam file saat desain. Mengubah nilai di app.config tidak mengubah database tempat aplikasi Anda tersambung.

Penghapusan Kaskade

LINQ ke SQL tidak mendukung atau mengenali operasi penghapusan kaskade. Jika Anda ingin menghapus baris dalam tabel yang memiliki batasan terhadapnya, Anda harus melakukan salah satu hal berikut ini:

  • Atur ON DELETE CASCADE aturan dalam batasan kunci asing dalam database.

  • Gunakan kode Anda sendiri untuk terlebih dahulu menghapus objek turunan yang mencegah objek induk dihapus.

Jika tidak, SqlException pengecualian akan dilemparkan.

Untuk informasi selengkapnya, lihat Cara: Menghapus Baris Dari Database.

Ekspresi Tidak Dapat Dikueri

Jika Anda mendapatkan "Ekspresi [ekspresi] tidak dapat dikueri; apakah Anda kehilangan referensi perakitan?" kesalahan, pastikan hal berikut:

  • Aplikasi Anda menargetkan .NET Compact Framework 3.5.

  • Anda memiliki referensi ke System.Core.dll dan System.Data.Linq.dll.

  • "Anda memiliki direktif Imports (Visual Basic) atau using (C#) untuk System.Linq dan System.Data.Linq."

DuplikatKeyException

Dalam proses debugging sebuah proyek LINQ to SQL, Anda mungkin menganalisis relasi dari entitas. Dengan melakukannya, memasukkan item-item tersebut ke dalam cache, dan LINQ ke SQL mengetahui keberadaan mereka. Jika Anda kemudian mencoba mengeksekusi Attach atau InsertOnSubmit atau metode serupa yang menghasilkan beberapa baris yang memiliki kunci yang sama, akan DuplicateKeyException dilemparkan.

Pengecualian Penggabungan String

Operasi penggabungan pada operan yang dipetakan ke [n]text dan [n][var]char lainnya tidak didukung. Pengecualian terjadi untuk penggabungan string yang dipetakan ke dua set jenis yang berbeda. Untuk informasi selengkapnya, lihat Metode System.String.

Lewati dan Kelola Pengecualian di SQL Server 2000

Anda harus menggunakan anggota identitas (IsPrimaryKey) saat menggunakan Take atau Skip terhadap database SQL Server 2000. Kueri harus dilakukan terhadap satu tabel (yaitu, bukan gabungan), atau menjadi operasi Distinct, Except, Intersect, atau Union, dan tidak boleh menyertakan operasi Concat. Untuk informasi selengkapnya, lihat bagian "Dukungan SQL Server 2000" di Terjemahan Operator Kueri Standar.

Persyaratan ini tidak berlaku untuk SQL Server 2005.

PengecualianOperasiTidakValid GroupBy

Pengecualian ini dilempar saat nilai kolom adalah null dalam kueri yang dikelompokkan berdasarkan ekspresi boolean, seperti group x by (Phone==@phone). Karena ekspresi adalah boolean, kunci disimpulkan menjadi boolean, bukan nullableboolean. Ketika perbandingan yang diterjemahkan menghasilkan null, upaya dilakukan untuk menetapkan nullableboolean ke boolean, dan pengecualian dilemparkan.

Untuk menghindari situasi ini (dengan asumsi Anda ingin memperlakukan null sebagai false), gunakan pendekatan seperti berikut:

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

Metode Parsial OnCreated()

Metode yang dihasilkan OnCreated() dipanggil setiap kali konstruktor objek dipanggil, termasuk skenario di mana LINQ ke SQL memanggil konstruktor untuk membuat salinan untuk nilai asli. Pertimbangkan perilaku ini jika Anda menerapkan metode OnCreated() di kelas sebagian Anda sendiri.

Lihat juga