Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Tom Dykstra
Aplikasi web sampel Contoso University menunjukkan cara membuat aplikasi ASP.NET Web Forms menggunakan Entity Framework 4.0 dan Visual Studio 2010. Untuk informasi tentang seri tutorial, lihat tutorial pertama dalam seri
Menggunakan Prosedur Tersimpan
Dalam tutorial sebelumnya Anda menerapkan pola pewarisan tabel per hierarki. Tutorial ini akan menunjukkan kepada Anda cara menggunakan prosedur tersimpan untuk mendapatkan kontrol lebih besar atas akses database.
Kerangka Kerja Entitas memungkinkan Anda menentukan bahwa kerangka kerja tersebut harus menggunakan prosedur tersimpan untuk akses database. Untuk jenis entitas apa pun, Anda dapat menentukan prosedur tersimpan yang akan digunakan untuk membuat, memperbarui, atau menghapus entitas jenis tersebut. Kemudian dalam model data Anda dapat menambahkan referensi ke prosedur tersimpan yang dapat Anda gunakan untuk melakukan tugas seperti mengambil set entitas.
Menggunakan prosedur tersimpan adalah persyaratan umum untuk akses database. Dalam beberapa kasus, administrator database mungkin mengharuskan semua akses database melalui prosedur tersimpan karena alasan keamanan. Dalam kasus lain, Anda mungkin ingin membangun logika bisnis ke dalam beberapa proses yang digunakan Kerangka Kerja Entitas saat memperbarui database. Misalnya, setiap kali entitas dihapus, Anda mungkin ingin menyalinnya ke database arsip. Atau setiap kali baris diperbarui, Anda mungkin ingin menulis baris ke tabel pengelogan yang merekam siapa yang membuat perubahan. Anda dapat melakukan jenis tugas ini dalam prosedur tersimpan yang dipanggil setiap kali Kerangka Kerja Entitas menghapus entitas atau memperbarui entitas.
Seperti dalam tutorial sebelumnya, Anda tidak akan membuat halaman baru apa pun. Sebagai gantinya, Anda akan mengubah cara Kerangka Kerja Entitas mengakses database untuk beberapa halaman yang sudah Anda buat.
Dalam tutorial ini Anda akan membuat prosedur tersimpan dalam database untuk penyisipan Student
dan Instructor
entitas. Anda akan menambahkannya ke model data, dan Anda akan menentukan bahwa Kerangka Kerja Entitas harus menggunakannya untuk menambahkan Student
dan Instructor
entitas ke database. Anda juga akan membuat prosedur tersimpan yang dapat Anda gunakan untuk mengambil Course
entitas.
Membuat Prosedur Tersimpan di Database
(Jika Anda menggunakan file School.mdf dari proyek yang tersedia untuk diunduh dengan tutorial ini, Anda dapat melewati bagian ini karena prosedur tersimpan sudah ada.)
Di Server Explorer, perluas School.mdf, klik kanan Prosedur Tersimpan, dan pilih Tambahkan Prosedur Tersimpan Baru.
Salin pernyataan SQL berikut dan tempelkan ke jendela prosedur tersimpan, menggantikan prosedur tersimpan kerangka.
CREATE PROCEDURE [dbo].[InsertStudent]
@LastName nvarchar(50),
@FirstName nvarchar(50),
@EnrollmentDate datetime
AS
INSERT INTO dbo.Person (LastName,
FirstName,
EnrollmentDate)
VALUES (@LastName,
@FirstName,
@EnrollmentDate);
SELECT SCOPE_IDENTITY() as NewPersonID;
Student
entitas memiliki empat properti: PersonID
, , LastName
FirstName
, dan EnrollmentDate
. Database menghasilkan nilai ID secara otomatis, dan prosedur tersimpan menerima parameter untuk tiga lainnya. Prosedur tersimpan mengembalikan nilai kunci rekaman baris baru sehingga Kerangka Kerja Entitas dapat melacaknya dalam versi entitas yang disimpan dalam memori.
Simpan dan tutup jendela prosedur tersimpan.
Buat prosedur tersimpan InsertInstructor
dengan cara yang sama, menggunakan pernyataan SQL berikut:
CREATE PROCEDURE [dbo].[InsertInstructor]
@LastName nvarchar(50),
@FirstName nvarchar(50),
@HireDate datetime
AS
INSERT INTO dbo.Person (LastName,
FirstName,
HireDate)
VALUES (@LastName,
@FirstName,
@HireDate);
SELECT SCOPE_IDENTITY() as NewPersonID;
Buat Update
prosedur tersimpan untuk Student
entitas dan Instructor
juga. (Database sudah memiliki prosedur tersimpan DeletePerson
yang akan berfungsi untuk Instructor
entitas dan Student
.)
CREATE PROCEDURE [dbo].[UpdateStudent]
@PersonID int,
@LastName nvarchar(50),
@FirstName nvarchar(50),
@EnrollmentDate datetime
AS
UPDATE Person SET LastName=@LastName,
FirstName=@FirstName,
EnrollmentDate=@EnrollmentDate
WHERE PersonID=@PersonID;
CREATE PROCEDURE [dbo].[UpdateInstructor]
@PersonID int,
@LastName nvarchar(50),
@FirstName nvarchar(50),
@HireDate datetime
AS
UPDATE Person SET LastName=@LastName,
FirstName=@FirstName,
HireDate=@HireDate
WHERE PersonID=@PersonID;
Dalam tutorial ini Anda akan memetakan ketiga fungsi -- menyisipkan, memperbarui, dan menghapus -- untuk setiap jenis entitas. Kerangka Kerja Entitas versi 4 memungkinkan Anda memetakan hanya satu atau dua fungsi ini ke prosedur tersimpan tanpa memetakan yang lain, dengan satu pengecualian: jika Anda memetakan fungsi pembaruan tetapi bukan fungsi penghapusan, Kerangka Kerja Entitas akan memberikan pengecualian ketika Anda mencoba menghapus entitas. Dalam Entity Framework versi 3.5, Anda tidak memiliki fleksibilitas sebanyak ini dalam memetakan prosedur tersimpan: jika Anda memetakan satu fungsi, Anda diharuskan memetakan ketiganya.
Untuk membuat prosedur tersimpan yang membaca daripada memperbarui data, buat prosedur yang memilih semua Course
entitas, menggunakan pernyataan SQL berikut:
CREATE PROCEDURE [dbo].[GetCourses]
AS
SELECT CourseID, Title, Credits, DepartmentID FROM dbo.Course
Menambahkan Prosedur Tersimpan ke Model Data
Prosedur tersimpan sekarang ditentukan dalam database, tetapi harus ditambahkan ke model data untuk membuatnya tersedia untuk Kerangka Kerja Entitas. Buka SchoolModel.edmx, klik kanan permukaan desain, dan pilih Perbarui Model dari Database. Di tab Tambahkan dari kotak dialog Pilih Objek Database Anda , perluas Prosedur Tersimpan, pilih prosedur yang baru dibuat dan DeletePerson
prosedur tersimpan, lalu klik Selesai.
Memetakan Prosedur Tersimpan
Di perancang model data, klik Student
kanan entitas dan pilih Pemetaan Prosedur Tersimpan.
Jendela Detail Pemetaan muncul, di mana Anda dapat menentukan prosedur tersimpan yang harus digunakan Kerangka Kerja Entitas untuk menyisipkan, memperbarui, dan menghapus entitas jenis ini.
Atur fungsi Sisipkan ke InsertStudent. Jendela menunjukkan daftar parameter prosedur tersimpan, yang masing-masing harus dipetakan ke properti entitas. Dua di antaranya dipetakan secara otomatis karena namanya sama. Tidak ada properti entitas bernama FirstName
, jadi Anda harus memilih FirstMidName
secara manual dari daftar drop-down yang memperlihatkan properti entitas yang tersedia. (Ini karena Anda mengubah nama properti menjadi FirstName
FirstMidName
di tutorial pertama.)
Di jendela Detail Pemetaan yang sama, petakan Update
fungsi ke UpdateStudent
prosedur tersimpan (pastikan Anda menentukan FirstMidName
sebagai nilai parameter untuk FirstName
, seperti yang Anda lakukan untuk Insert
prosedur tersimpan) dan Delete
fungsi ke DeletePerson
prosedur tersimpan.
Ikuti prosedur yang sama untuk memetakan menyisipkan, memperbarui, dan menghapus prosedur tersimpan untuk instruktur ke Instructor
entitas.
Untuk prosedur tersimpan yang membaca daripada memperbarui data, Anda menggunakan jendela Browser Model untuk memetakan prosedur tersimpan ke jenis entitas yang dikembalikannya. Di perancang model data, klik kanan permukaan desain dan pilih Browser Model. Buka simpul SchoolModel.Store lalu buka simpul Prosedur Tersimpan . Lalu klik kanan prosedur tersimpan GetCourses
dan pilih Tambahkan Impor Fungsi.
Dalam kotak dialog Tambahkan Impor Fungsi , di bawah Mengembalikan KumpulanEntitas tertentu, lalu pilih Course
sebagai jenis entitas yang dikembalikan. Setelah selesai, klik OK. Simpan dan tutup file .edmx .
Menggunakan Sisipkan, Perbarui, dan Hapus Prosedur Tersimpan
Prosedur tersimpan untuk menyisipkan, memperbarui, dan menghapus data digunakan oleh Kerangka Kerja Entitas secara otomatis setelah Anda menambahkannya ke model data dan memetakannya ke entitas yang sesuai. Sekarang Anda dapat menjalankan halaman StudentsAdd.aspx , dan setiap kali Anda membuat siswa baru, Kerangka Kerja Entitas akan menggunakan InsertStudent
prosedur tersimpan untuk menambahkan baris baru ke Student
tabel.
Jalankan halaman Students.aspx dan siswa baru muncul dalam daftar.
Ubah nama untuk memverifikasi bahwa fungsi pembaruan berfungsi, lalu hapus siswa untuk memverifikasi bahwa fungsi penghapusan berfungsi.
Menggunakan Pilih Prosedur Tersimpan
Kerangka Kerja Entitas tidak secara otomatis menjalankan prosedur tersimpan seperti GetCourses
, dan Anda tidak dapat menggunakannya dengan EntityDataSource
kontrol . Untuk menggunakannya, Anda memanggilnya dari kode.
Buka file InstructorsCourses.aspx.cs . Metode ini PopulateDropDownLists
menggunakan kueri LINQ-to-Entities untuk mengambil semua entitas kursus sehingga dapat mengulang daftar dan menentukan mana yang ditetapkan instruktur dan mana yang tidak ditetapkan:
var allCourses = (from c in context.Courses
select c).ToList();
Ganti ini dengan kode berikut:
var allCourses = context.GetCourses();
Halaman sekarang menggunakan GetCourses
prosedur tersimpan untuk mengambil daftar semua kursus. Jalankan halaman untuk memverifikasi bahwa halaman berfungsi seperti sebelumnya.
(Properti navigasi entitas yang diambil oleh prosedur tersimpan mungkin tidak diisi secara otomatis dengan data yang terkait dengan entitas tersebut, tergantung pada ObjectContext
pengaturan default. Untuk informasi selengkapnya, lihat Memuat Objek Terkait di Pustaka MSDN.)
Dalam tutorial berikutnya, Anda akan mempelajari cara menggunakan fungsionalitas Data Dinamis untuk mempermudah memprogram dan menguji aturan pemformatan dan validasi data. Alih-alih menentukan pada setiap aturan halaman web seperti string format data dan apakah bidang diperlukan atau tidak, Anda dapat menentukan aturan tersebut dalam metadata model data dan secara otomatis diterapkan di setiap halaman.