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:
[Keyless]
atau .HasNoKey()
API fasih.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:
DbQuery<T>
sifat dalam DbContext
anda, dengan T
ialah kelas tersuai yang sepadan dengan struktur output pertanyaan anda.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!