Anggap saja saya memiliki kebutuhan yang valid untuk secara langsung mengeksekusi perintah sql di Entity Framework. Saya mengalami kesulitan mencari tahu cara menggunakan parameter dalam pernyataan sql saya. Contoh berikut (bukan contoh sebenarnya) tidak berfungsi.
var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = @FirstName WHERE Id = @Id";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
Metode ExecuteSqlCommand tidak memungkinkan Anda untuk memasukkan parameter bernama seperti di ADO.Net dan dokumentasi untuk metode ini tidak memberikan contoh tentang cara menjalankan kueri parameterisasi.
Bagaimana cara menentukan parameter dengan benar?
entity-framework
entity-framework-4.1
jessegavin
sumber
sumber
Ternyata ini berhasil.
sumber
SqlParameter("@paramName", value)
sebagai gantinya.Anda dapat:
1) Lewati argumen mentah dan gunakan sintaks {0}. Misalnya:
2) Lulus argumen subkelas DbParameter dan gunakan sintaks @ParamName.
Jika Anda menggunakan sintaks pertama, EF sebenarnya akan membungkus argumen Anda dengan kelas DbParamater, menetapkannya, dan mengganti {0} dengan nama parameter yang dihasilkan.
Sintaks pertama jika disukai karena Anda tidak perlu menggunakan pabrik atau tahu apa jenis DbParamaters untuk membuat (SqlParameter, OracleParamter, dll.).
sumber
Jawaban lain tidak berfungsi saat menggunakan Oracle. Anda harus menggunakan
:
bukan@
.sumber
Coba ini (diedit):
Gagasan sebelumnya salah.
sumber
Untuk entitas Framework Core 2.0 atau lebih baru, cara yang benar untuk melakukan ini adalah:
Perhatikan bahwa Entity Framework akan menghasilkan dua parameter untuk Anda, sehingga Anda terlindungi dari Sql Injection.
Perhatikan juga bahwa BUKAN:
karena ini TIDAK melindungi Anda dari Sql Injection, dan tidak ada parameter yang dihasilkan.
Lihat ini untuk lebih lanjut.
sumber
ctx.Database.ExecuteSqlCommand("Update [User] SET FirstName = {firstName} WHERE Id = {id}", firstName, id);
FormattableString
. Anda benar dan itu sangat keren!Versi sederhana untuk Oracle. Jika Anda tidak ingin membuat OracleParameter
sumber
Ini sangat sederhana !!!
Gambar untuk mengetahui referensi parameter
sumber
Untuk Metode async ("ExecuteSqlCommandAsync") Anda dapat menggunakannya seperti ini:
sumber
Jika tipe data database yang mendasarinya adalah varchar maka Anda harus tetap menggunakan pendekatan di bawah ini. Kalau tidak, permintaan akan memiliki dampak kinerja yang sangat besar.
Anda dapat memeriksa profiler Sql untuk melihat perbedaannya.
sumber
Pemakaian:
sumber
ExecuteSqlCommand()
Anda harus yakin untuk menjawab pertanyaan spesifik yang ditanyakan ketika Anda memposting jawaban.Banyak params dalam prosedur tersimpan yang memiliki banyak params di vb:
sumber
Prosedur tersimpan dapat dijalankan seperti di bawah ini
sumber
Untuk .NET Core 2.2, Anda dapat menggunakan
FormattableString
untuk SQL dinamis.sumber