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 Rick Anderson
Tutorial ini akan mengajari Anda dasar-dasar membangun aplikasi Web MVC ASP.NET menggunakan Microsoft Visual Web Developer 2010 Express Service Pack 1, yang merupakan versi gratis dari Microsoft Visual Studio. Sebelum memulai, pastikan Anda telah menginstal prasyarat yang tercantum di bawah ini. Anda dapat menginstal semuanya dengan mengklik tautan berikut: Penginstal Platform Web. Atau, Anda dapat menginstal prasyarat secara individual menggunakan tautan berikut:
- Prasyarat Visual Studio Web Developer Express SP1
- ASP.NET Pembaruan Alat MVC 3
- SQL Server Compact 4.0(runtime + dukungan alat)
Jika Anda menggunakan Visual Studio 2010 alih-alih Visual Web Developer 2010, instal prasyarat dengan mengklik tautan berikut: Prasyarat Visual Studio 2010.
Proyek Visual Web Developer dengan kode sumber VB.NET tersedia untuk menyertai topik ini. Unduh versi VB.NET. Jika Anda lebih suka C#, beralihlah ke versi C# dari tutorial ini.
Di bagian ini Anda akan membuat beberapa perubahan pada kelas model dan mempelajari cara memperbarui skema database agar sesuai dengan perubahan model.
Menambahkan Properti Peringkat ke Model Film
Mulailah dengan menambahkan properti baru Rating
ke kelas yang Movie
sudah ada. Buka file Movie.cs dan tambahkan Rating
properti seperti ini:
Public Property Rating() As String
Kelas lengkap Movie
sekarang terlihat seperti kode berikut:
Public Class Movie
Public Property ID() As Integer
Public Property Title() As String
Public Property ReleaseDate() As Date
Public Property Genre() As String
Public Property Price() As Decimal
Public Property Rating() As String
End Class
Kompilasi ulang aplikasi menggunakan perintah menu Debug>Build Movie.
Setelah memperbarui Model
kelas, Anda juga perlu memperbarui templat tampilan \Views\Movies\Index.vbhtml dan \Views\Movies\Create.vbhtml untuk mendukung properti baru Rating
.
Buka file\Views\Movies\Index.vbhtml dan tambahkan <th>Rating</th>
judul kolom tepat setelah kolom Harga . Kemudian tambahkan <td>
kolom di dekat akhir templat untuk merender @item.Rating
nilai. Di bawah ini adalah seperti apa templat tampilan Index.vbhtml yang diperbarui:
<table>
<tr>
<th> Title </th>
<th> ReleaseDate </th>
<th> Genre </th>
<th> Price </th>
<th>Rating</th>
<th></th>
</tr>
@For Each item In Model
Dim currentItem = item
@<tr>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Title)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.ReleaseDate)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Genre)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Price)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Rating)
</td>
<td>
@Html.ActionLink("Edit", "Edit", New With {.id = currentItem.ID}) |
@Html.ActionLink("Details", "Details", New With {.id = currentItem.ID}) |
@Html.ActionLink("Delete", "Delete", New With {.id = currentItem.ID})
</td>
</tr>
Next
</table>
Selanjutnya, buka file \Views\Movies\Create.vbhtml dan tambahkan markup berikut di dekat akhir formulir. Ini merender kotak teks sehingga Anda dapat menentukan peringkat saat film baru dibuat.
<div class="editor-label">
@Html.LabelFor(Function(model) model.Rating)
</div>
<div class="editor-field">
@Html.EditorFor(Function(model) model.Rating)
@Html.ValidationMessageFor(Function(model) model.Rating)
</div>
Mengelola Perbedaan Skema Model dan Database
Anda sekarang telah memperbarui kode aplikasi untuk mendukung properti baru Rating
.
Sekarang jalankan aplikasi dan navigasikan ke URL /Movies . Namun, saat Anda melakukan ini, Anda akan melihat kesalahan berikut:
Anda melihat kesalahan ini karena kelas model yang diperbarui Movie
dalam aplikasi sekarang berbeda dari Movie
skema tabel database yang ada. (Tidak ada Rating
kolom dalam tabel database.)
Secara default, ketika Anda menggunakan Kode Kerangka Kerja Entitas Pertama untuk membuat database secara otomatis, seperti yang Anda lakukan sebelumnya dalam tutorial ini, Code First menambahkan tabel ke database untuk membantu melacak apakah skema database sinkron dengan kelas model tempat database dihasilkan. Jika tidak sinkron, Kerangka Kerja Entitas akan melemparkan kesalahan. Ini memudahkan untuk melacak masalah pada waktu pengembangan yang mungkin hanya Anda temukan (dengan kesalahan yang tidak jelas) pada waktu proses. Fitur pemeriksaan sinkronisasi adalah yang menyebabkan pesan kesalahan ditampilkan yang baru saja Anda lihat.
Ada dua pendekatan untuk menyelesaikan kesalahan:
- Minta Kerangka Kerja Entitas secara otomatis menghilangkan dan membuat ulang database berdasarkan skema kelas model baru. Pendekatan ini sangat nyaman ketika melakukan pengembangan aktif pada database pengujian, karena memungkinkan Anda untuk dengan cepat mengembangkan model dan skema database bersama-sama. Namun, kelemahannya adalah Anda kehilangan data yang ada dalam database — sehingga Anda tidak ingin menggunakan pendekatan ini pada database produksi!
- Ubah skema database yang ada secara eksplisit sehingga cocok dengan kelas model. Keuntungan dari pendekatan ini adalah Anda menyimpan data Anda. Anda dapat membuat perubahan ini secara manual atau dengan membuat skrip perubahan database.
Untuk tutorial ini, kita akan menggunakan pendekatan pertama — Anda akan memiliki Kode Kerangka Kerja Entitas Terlebih dahulu secara otomatis membuat ulang database kapan saja model berubah.
Membuat Ulang Database secara Otomatis pada Perubahan Model
Mari kita perbarui aplikasi sehingga Code First secara otomatis menghilangkan dan membuat ulang database kapan saja Anda mengubah model untuk aplikasi.
Catatan
Peringatan Anda harus mengaktifkan pendekatan ini untuk secara otomatis menghilangkan dan membuat ulang database hanya saat Anda menggunakan database pengembangan atau pengujian, dan tidak pernah pada database produksi yang berisi data nyata. Menggunakannya di server produksi dapat menyebabkan kehilangan data.
Di Penjelajah Solusi, klik kanan folder Model, pilih Tambahkan, lalu pilih Kelas.
Beri nama kelas "MovieInitializer". MovieInitializer
Perbarui kelas untuk berisi kode berikut:
using System;
Imports System
Imports System.Collections.Generic
Imports System.Data.Entity
Namespace MvcMovie.Models
Public Class MovieInitializer
Inherits DropCreateDatabaseIfModelChanges(Of MovieDBContext)
Protected Overrides Sub Seed(ByVal context As MovieDBContext)
Dim movies = New List(Of Movie) From {
New Movie With {.Title = "When Harry Met Sally", .ReleaseDate = Date.Parse("1989-1-11"), .Genre = "Romantic Comedy", .Rating = "R", .Price = 7.99D},
New Movie With {.Title = "Ghostbusters ", .ReleaseDate = Date.Parse("1984-3-13"), .Genre = "Comedy", .Rating = "R", .Price = 8.99D},
New Movie With {.Title = "Ghostbusters 2", .ReleaseDate = Date.Parse("1986-2-23"), .Genre = "Comedy", .Rating = "R", .Price = 9.99D},
New Movie With {.Title = "Rio Bravo", .ReleaseDate = Date.Parse("1959-4-15"), .Genre = "Western", .Rating = "R", .Price = 3.99D}}
movies.ForEach(Function(d) context.Movies.Add(d))
End Sub
End Class
End Namespace
Kelas MovieInitializer
menentukan bahwa database yang digunakan oleh model harus dihilangkan dan dibuat ulang secara otomatis jika kelas model pernah berubah. Kode menyertakan Seed
metode untuk menentukan beberapa data default untuk ditambahkan secara otomatis ke database kapan saja dibuat (atau dibuat ulang). Ini menyediakan cara yang berguna untuk mengisi database dengan beberapa data sampel, tanpa mengharuskan Anda mengisinya secara manual setiap kali Anda membuat perubahan model.
Sekarang setelah Anda mendefinisikan MovieInitializer
kelas, Anda akan ingin menyambungkannya sehingga setiap kali aplikasi berjalan, ia memeriksa apakah kelas model berbeda dari skema dalam database. Jika ya, Anda dapat menjalankan penginisialisasi untuk membuat ulang database agar sesuai dengan model lalu mengisi database dengan data sampel.
Buka file Global.asax yang berada di akar MvcMovies
proyek:
File Global.asax berisi kelas yang menentukan seluruh aplikasi untuk proyek, dan berisi penanganan Application_Start
aktivitas yang berjalan saat aplikasi pertama kali dimulai.
Application_Start
Temukan metode dan tambahkan panggilan ke Database.SetInitializer
di awal metode, seperti yang ditunjukkan di bawah ini:
Sub Application_Start()
System.Data.Entity.Database.SetInitializer(Of MovieDBContext)(New MvcMovie.Models.MovieInitializer())
AreaRegistration.RegisterAllAreas()
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
End Sub
Pernyataan Database.SetInitializer
yang baru saja Anda tambahkan menunjukkan bahwa database yang digunakan oleh MovieDBContext
instans harus dihapus dan dibuat ulang secara otomatis jika skema dan database tidak cocok. Dan seperti yang Anda lihat, database juga akan mengisi database dengan data sampel yang ditentukan di MovieInitializer
kelas .
Tutup file Global.asax.
Jalankan kembali aplikasi dan navigasikan ke URL /Movies . Ketika aplikasi dimulai, aplikasi mendeteksi bahwa struktur model tidak lagi cocok dengan skema database. Ini secara otomatis membuat ulang database agar sesuai dengan struktur model baru dan mengisi database dengan contoh film:
Klik tautan Buat Baru untuk menambahkan film baru. Perhatikan bahwa Anda dapat menambahkan peringkat.
Klik Buat. Film baru, termasuk peringkat, sekarang muncul di daftar film:
Di bagian ini Anda melihat bagaimana Anda dapat memodifikasi objek model dan menjaga database tetap sinkron dengan perubahan. Anda juga mempelajari cara mengisi database yang baru dibuat dengan data sampel sehingga Anda dapat mencoba skenario. Selanjutnya, mari kita lihat bagaimana Anda dapat menambahkan logika validasi yang lebih kaya ke kelas model dan memungkinkan beberapa aturan bisnis diberlakukan.