Apa cara terbaik untuk memeriksa apakah suatu objek ada dalam database dari sudut pandang kinerja? Saya menggunakan Entity Framework 1.0 (ASP.NET 3.5 SP1).
114
Apa cara terbaik untuk memeriksa apakah suatu objek ada dalam database dari sudut pandang kinerja? Saya menggunakan Entity Framework 1.0 (ASP.NET 3.5 SP1).
Jika Anda tidak ingin mengeksekusi SQL secara langsung, cara terbaik adalah menggunakan Any () . Ini karena Any () akan kembali segera setelah menemukan kecocokan. Opsi lainnya adalah Count () , tetapi ini mungkin perlu memeriksa setiap baris sebelum kembali.
Berikut contoh cara menggunakannya:
if (context.MyEntity.Any(o => o.Id == idToMatch))
{
// Match!
}
Dan di vb.net
If context.MyEntity.Any(function(o) o.Id = idToMatch) Then
' Match!
End If
T
ke antarmuka yaituIEnumerable
dan mengembalikan objek yang berisiId
, Anda harus dapat menggunakan fungsi umum AndaIsExists<T>()
.Dari sudut pandang kinerja, saya rasa kueri SQL langsung menggunakan perintah EXISTS akan sesuai. Lihat di sini untuk mengetahui cara menjalankan SQL secara langsung di Entity Framework: http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework- 4.aspx
sumber
Saya harus mengelola skenario di mana persentase duplikat yang diberikan dalam catatan data baru sangat tinggi, dan ribuan panggilan database dilakukan untuk memeriksa duplikat (sehingga CPU mengirimkan banyak waktu pada 100%). Pada akhirnya saya memutuskan untuk menyimpan 100.000 catatan terakhir dalam cache dalam memori. Dengan cara ini saya dapat memeriksa duplikat terhadap catatan cache yang sangat cepat jika dibandingkan dengan kueri LINQ terhadap database SQL, dan kemudian menulis catatan yang benar-benar baru ke database (serta menambahkannya ke cache data, yang saya juga diurutkan dan dipangkas agar panjangnya dapat diatur).
Perhatikan bahwa data mentah adalah file CSV yang berisi banyak catatan individu yang harus diurai. Catatan di setiap file berturut-turut (yang datang dengan kecepatan sekitar 1 setiap 5 menit) sangat tumpang tindih, karenanya tingginya persentase duplikat.
Singkatnya, jika Anda memiliki data mentah dengan stempel waktu yang masuk, cukup berurutan, maka menggunakan cache memori mungkin membantu pemeriksaan duplikasi rekaman.
sumber
Saya tahu ini adalah utas yang sangat lama tetapi hanya memetikan seseorang seperti saya membutuhkan solusi ini tetapi di VB.NET inilah yang saya gunakan berdasarkan jawaban di atas.
sumber
Saya mengalami beberapa masalah dengan ini - EntityKey saya terdiri dari tiga properti (PK dengan 3 kolom) dan saya tidak ingin memeriksa setiap kolom karena itu akan jelek. Saya memikirkan solusi yang bekerja sepanjang waktu dengan semua entitas.
Alasan lain untuk ini adalah saya tidak suka menangkap UpdateExceptions setiap saat.
Sedikit Refleksi diperlukan untuk mendapatkan nilai properti kunci.
Kode diimplementasikan sebagai ekstensi untuk menyederhanakan penggunaan sebagai:
Silahkan lihat:
sumber
Saya hanya memeriksa apakah objeknya nol, itu berfungsi 100% untuk saya
sumber
Mengapa tidak melakukannya?
sumber
Cara terbaik untuk melakukannya
Terlepas dari apa objek Anda dan untuk tabel apa dalam database, satu-satunya hal yang perlu Anda miliki adalah kunci utama dalam objek.
Kode C #
Kode VB.NET
sumber