Prosedur Tersimpan Kueri Perancang
Panduan langkah demi langkah ini menunjukkan cara menggunakan Perancang Kerangka Kerja Entitas (Perancang EF) untuk mengimpor prosedur tersimpan ke dalam model lalu memanggil prosedur tersimpan yang diimpor untuk mengambil hasil.
Perhatikan bahwa Code First tidak mendukung pemetaan ke prosedur atau fungsi tersimpan. Namun, Anda dapat memanggil prosedur atau fungsi tersimpan dengan menggunakan metode System.Data.Entity.DbSet.SqlQuery. Contohnya:
var query = context.Products.SqlQuery("EXECUTE [dbo].[GetAllProducts]")`;
Prasyarat
Untuk menyelesaikan panduan ini, Anda memerlukan:
Menyiapkan Proyek
- Buka Visual Studio 2012.
- Pilih File-> Baru -> Proyek
- Di panel kiri, klik Visual C#, lalu pilih templat Konsol .
- Masukkan EFwithSProcsSample sebagai nama.
- Pilih OK.
Buat model
Klik kanan proyek di Penjelajah Solusi dan pilih Tambahkan -> Item Baru.
Pilih Data dari menu sebelah kiri lalu pilih ADO.NET Model Data Entitas di panel Templat.
Masukkan EFwithSProcsModel.edmx untuk nama file, lalu klik Tambahkan.
Dalam kotak dialog Pilih Konten Model, pilih Hasilkan dari database, lalu klik Berikutnya.
Klik Koneksi Baru.
Dalam kotak dialog Properti Koneksi, masukkan nama server (misalnya, (localdb)\mssqllocaldb), pilih metode autentikasi, ketik Sekolah untuk nama database, lalu klik OK.
Kotak dialog Pilih Koneksi Data Anda diperbarui dengan pengaturan koneksi database Anda.Dalam kotak dialog Pilih Objek Database Anda, centang kotak centang Tabel untuk memilih semua tabel.
Selain itu, pilih prosedur tersimpan berikut di bawah simpul Prosedur dan Fungsi Tersimpan : GetStudentGrades dan GetDepartmentName.Dimulai dengan Visual Studio 2012, EF Designer mendukung impor massal prosedur tersimpan. Mengimpor prosedur dan fungsi tersimpan yang dipilih ke dalam model entitas diperiksa secara default.
Klik Selesai.
Secara default, bentuk hasil dari setiap prosedur atau fungsi tersimpan yang diimpor yang mengembalikan lebih dari satu kolom akan secara otomatis menjadi jenis kompleks baru. Dalam contoh ini kita ingin memetakan hasil fungsi GetStudentGrades ke entitas StudentGrade dan hasil GetDepartmentName ke none (tidak ada yang merupakan nilai default).
Agar impor fungsi mengembalikan jenis entitas, kolom yang dikembalikan oleh prosedur tersimpan yang sesuai harus sama persis dengan properti skalar dari jenis entitas yang dikembalikan. Impor fungsi juga dapat mengembalikan koleksi jenis sederhana, jenis kompleks, atau tanpa nilai.
- Klik kanan permukaan desain dan pilih Browser Model.
- Di Browser Model, pilih Impor Fungsi, lalu klik dua kali fungsi GetStudentGrades .
- Dalam kotak dialog Edit Impor Fungsi, pilih Entitas dan pilih StudentGrade.
Kotak centang Impor Fungsi dapat disusun di bagian atas dialog Impor Fungsi akan memungkinkan Anda memetakan ke fungsi yang dapat dikomposisi. Jika Anda mencentang kotak ini, hanya fungsi yang dapat disusun (Fungsi bernilai tabel) yang akan muncul di daftar drop-down Prosedur Tersimpan/Nama Fungsi. Jika Anda tidak mencentang kotak ini, hanya fungsi yang tidak dapat dikomposisikan yang akan ditampilkan dalam daftar.
Menggunakan Model
Buka file Program.cs tempat metode Utama ditentukan. Tambahkan kode berikut ke fungsi Utama.
Kode memanggil dua prosedur tersimpan: GetStudentGrades (mengembalikan StudentGrades untuk StudentId yang ditentukan) dan GetDepartmentName (mengembalikan nama departemen dalam parameter output).
using (SchoolEntities context = new SchoolEntities())
{
// Specify the Student ID.
int studentId = 2;
// Call GetStudentGrades and iterate through the returned collection.
foreach (StudentGrade grade in context.GetStudentGrades(studentId))
{
Console.WriteLine("StudentID: {0}\tSubject={1}", studentId, grade.Subject);
Console.WriteLine("Student grade: " + grade.Grade);
}
// Call GetDepartmentName.
// Declare the name variable that will contain the value returned by the output parameter.
ObjectParameter name = new ObjectParameter("Name", typeof(String));
context.GetDepartmentName(1, name);
Console.WriteLine("The department name is {0}", name.Value);
}
Kompilasi dan jalankan aplikasi. Contoh ini menghasilkan output berikut:
StudentID: 2
Student grade: 4.00
StudentID: 2
Student grade: 3.50
The department name is Engineering
Parameter Output
Jika parameter output digunakan, nilainya tidak akan tersedia sampai hasilnya telah dibaca sepenuhnya. Hal ini disebabkan oleh perilaku DbDataReader yang mendasar, lihat Mengambil Data Menggunakan DataReader untuk detail selengkapnya.