Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh melaksanakan pertanyaan SQL mentah tanpa DBSET dalam teras Rangka Kerja Entiti?

Bagaimanakah saya boleh melaksanakan pertanyaan SQL mentah tanpa DBSET dalam teras Rangka Kerja Entiti?

Linda Hamilton
Linda Hamiltonasal
2025-01-27 01:01:12351semak imbas

How Can I Execute Raw SQL Queries Without DbSets in Entity Framework Core?

Penyelesaian untuk Pertanyaan SQL Mentah tanpa DbSet dalam Teras Rangka Kerja Entiti

Penghapusan Teras Rangka Kerja Entiti dbData.Database.SqlQuery<somemodel> memberikan cabaran apabila melaksanakan pertanyaan SQL mentah yang mengembalikan entiti yang tidak dipetakan, terutamanya untuk tugas seperti carian teks penuh dengan kedudukan. Begini cara untuk mengatasi had ini:

EF Teras 8 dan Kemudian:

Penyelesaian paling mudah dalam EF Core 8 dan versi yang lebih baru ialah menggunakan SqlQuery secara langsung. Ia kini menyokong pengembalian jenis sewenang-wenangnya, menghapuskan keperluan untuk entiti tanpa kunci dalam banyak kes.

EF Teras 3.0 dan Ke Atas:

Pendekatan yang disyorkan untuk EF Core 3.0 dan lebih baru ialah menggunakan jenis entiti tanpa kunci:

  1. Tentukan jenis entiti tanpa kunci menggunakan atribut [Keyless] atau .HasNoKey() API fasih.
  2. Laksanakan pertanyaan SQL anda menggunakan FromSqlRaw atau FromSqlAsync:
<code class="language-csharp">var result = context.SomeModels.FromSqlRaw("SQL SCRIPT").ToList();
var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();</code>

EF Teras 2.1 dan Ke Atas:

Untuk versi lama (EF Core 2.1 dan ke atas), pertimbangkan untuk menggunakan jenis pertanyaan:

  1. Isytiharkan DbQuery<T> sifat dalam DbContext anda, dengan T ialah kelas tersuai yang sepadan dengan struktur output pertanyaan anda.
  2. Gunakan FromSql pada harta DbQuery ini:
<code class="language-csharp">public DbQuery<SomeModel> SomeModels { get; set; }

var result = context.SomeModels.FromSql("SQL_SCRIPT").ToList();
var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();</code>

Kaedah ini menawarkan fleksibiliti dalam mendapatkan semula data daripada pertanyaan SQL mentah, menampung senario yang melibatkan kedudukan dan entiti tidak dipetakan dalam Teras Rangka Kerja Entiti.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan pertanyaan SQL mentah tanpa DBSET dalam teras Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn