Bagikan melalui


Memulai Entity Framework 4.0 Database First dan ASP.NET 4 Web Forms - Bagian 7

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.

image15

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;

image14

Studententitas memiliki empat properti: PersonID, , LastNameFirstName, 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.

image20

Memetakan Prosedur Tersimpan

Di perancang model data, klik Student kanan entitas dan pilih Pemetaan Prosedur Tersimpan.

image21

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.

gambar22

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 FirstNameFirstMidName di tutorial pertama.)

gambar23

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.

image01

Ikuti prosedur yang sama untuk memetakan menyisipkan, memperbarui, dan menghapus prosedur tersimpan untuk instruktur ke Instructor entitas.

image02

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.

image24

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 .

image25

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.

image03

Jalankan halaman Students.aspx dan siswa baru muncul dalam daftar.

image04

Ubah nama untuk memverifikasi bahwa fungsi pembaruan berfungsi, lalu hapus siswa untuk memverifikasi bahwa fungsi penghapusan berfungsi.

image05

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.