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.
Note
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.
Warning
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Oleh Rick Anderson
Di bagian ini Entity Framework Core (EF Core) digunakan untuk menentukan skema database berdasarkan kelas model aplikasi:
- Tambahkan bidang baru ke model.
- Migrasikan perubahan skema bidang baru ke database.
Pendekatan ini EF Core memungkinkan proses pengembangan yang lebih tangkas. Pengembang bekerja pada model data aplikasi secara langsung saat skema database dibuat dan kemudian disinkronkan, semua tanpa pengembang harus beralih konteks ke dan dari alat manajemen database. Untuk gambaran umum Entity Framework Core dan manfaatnya, lihat Entity Framework Core.
Menggunakan Kode EF untuk membuat dan melacak database secara otomatis:
-
__EFMigrationsHistoryMenambahkan tabel ke database untuk melacak apakah skema database sinkron dengan kelas model yang dihasilkannya. - Memberikan pengecualian jika kelas model tidak sinkron dengan database.
Verifikasi otomatis bahwa skema dan model sinkron memudahkan untuk menemukan masalah kode database yang tidak konsisten.
Menambahkan Properti Peringkat ke Model Film
Models/Movie.csBuka file dan tambahkanRatingproperti:public class Movie { public int Id { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Edit
Pages/Movies/Index.cshtml, dan tambahkanRatingbidang:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> | <a asp-page="./Details" asp-route-id="@item.Id">Details</a> | <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a> </td> </tr> } </tbody> </table>Perbarui halaman berikut dengan
Ratingbidang:
Aplikasi tidak akan berfungsi sampai database diperbarui untuk menyertakan bidang baru. Menjalankan aplikasi tanpa pembaruan ke database melempar :SqlException
SqlException: Invalid column name 'Rating'.
Pengecualian SqlException disebabkan oleh kelas model Film yang diperbarui berbeda dari skema tabel Film database. Tidak ada Rating kolom dalam tabel database.
Ada beberapa pendekatan untuk mengatasi kesalahan:
- Minta Kerangka Kerja Entitas secara otomatis menghilangkan dan membuat ulang database menggunakan skema kelas model baru. Pendekatan ini nyaman di awal siklus pengembangan, memungkinkan pengembang untuk dengan cepat mengembangkan model dan skema database bersama-sama. Kelemahannya adalah bahwa data yang ada dalam database hilang. Jangan gunakan pendekatan ini pada database produksi! Menghilangkan database pada perubahan skema dan menggunakan penginisialisasi untuk secara otomatis menyemai database dengan data pengujian sering kali merupakan cara produktif untuk mengembangkan aplikasi.
- Ubah skema database yang ada secara eksplisit sehingga cocok dengan kelas model. Keuntungan dari pendekatan ini adalah menyimpan data. Buat perubahan ini secara manual atau dengan membuat skrip perubahan database.
- Gunakan EF Core Migrasi untuk memperbarui skema database.
Untuk tutorial ini, gunakan EF Core Migrasi.
SeedData Perbarui kelas sehingga memberikan nilai untuk kolom baru. Perubahan sampel ditunjukkan di bawah ini, tetapi buat perubahan ini untuk setiap new Movie blok.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Lihat file SeedData.cs yang telah selesai.
Membangun aplikasi
Tekan Ctrl+Shift+B
Menambahkan migrasi untuk bidang peringkat
Dari menu Alat , pilih NuGet Package Manager > Package Manager Console.
Di Package Manager Console (PMC), masukkan perintah berikut:
Add-Migration Rating
Perintah Add-Migration memberi tahu kerangka kerja untuk:
- Bandingkan
Moviemodel denganMovieskema database. - Buat kode untuk memigrasikan skema database ke model baru.
Nama "Peringkat" bersifat arbitrer dan digunakan untuk memberi nama file migrasi. Sangat membantu untuk menggunakan nama yang bermakna untuk file migrasi.
Di PMC, masukkan perintah berikut:
Update-Database
Perintah Update-Database memberi tahu kerangka kerja untuk menerapkan perubahan skema ke database dan untuk mempertahankan data yang ada.
Hapus semua rekaman dalam database, penginisialisasi akan menyemai database dan menyertakan Rating bidang . Menghapus dapat dilakukan dengan tautan penghapusan di browser atau dari Sql Server Object Explorer (SSOX).
Opsi lain adalah menghapus database dan menggunakan migrasi untuk membuat ulang database. Untuk menghapus database di SSOX:
Pilih database di SSOX.
Klik kanan pada database, dan pilih Hapus.
Centang Tutup koneksi yang sudah ada.
Pilih OK.
Di PMC, perbarui database:
Update-Database
Jalankan aplikasi dan verifikasi bahwa Anda dapat membuat, mengedit, dan menampilkan film dengan Rating bidang. Jika database tidak seeded, atur titik henti dalam SeedData.Initialize metode .
Langkah selanjutnya
Di bagian ini, Migrasi Pertama Kode Kerangka Kerja Entitas digunakan untuk:
- Tambahkan bidang baru ke model.
- Migrasikan perubahan skema bidang baru ke database.
Saat menggunakan Kode EF Terlebih Dahulu untuk membuat dan melacak database secara otomatis, Kode Pertama:
-
__EFMigrationsHistoryMenambahkan tabel ke database untuk melacak apakah skema database sinkron dengan kelas model yang dihasilkannya. - Memberikan pengecualian jika kelas model tidak sinkron dengan database.
Verifikasi otomatis bahwa skema dan model sinkron memudahkan untuk menemukan masalah kode database yang tidak konsisten.
Menambahkan Properti Peringkat ke Model Film
Models/Movie.csBuka file dan tambahkanRatingproperti:public class Movie { public int Id { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Edit
Pages/Movies/Index.cshtml, dan tambahkanRatingbidang:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> | <a asp-page="./Details" asp-route-id="@item.Id">Details</a> | <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a> </td> </tr> } </tbody> </table>Perbarui halaman berikut dengan
Ratingbidang:
Aplikasi tidak akan berfungsi sampai database diperbarui untuk menyertakan bidang baru. Menjalankan aplikasi tanpa pembaruan ke database melempar :SqlException
SqlException: Invalid column name 'Rating'.
Pengecualian SqlException disebabkan oleh kelas model Film yang diperbarui berbeda dari skema tabel Film database. Tidak ada Rating kolom dalam tabel database.
Ada beberapa pendekatan untuk mengatasi kesalahan:
- Minta Kerangka Kerja Entitas secara otomatis menghilangkan dan membuat ulang database menggunakan skema kelas model baru. Pendekatan ini nyaman di awal siklus pengembangan, memungkinkan pengembang untuk dengan cepat mengembangkan model dan skema database bersama-sama. Kelemahannya adalah bahwa data yang ada dalam database hilang. Jangan gunakan pendekatan ini pada database produksi! Menghilangkan database pada perubahan skema dan menggunakan penginisialisasi untuk secara otomatis menyemai database dengan data pengujian sering kali merupakan cara produktif untuk mengembangkan aplikasi.
- Ubah skema database yang ada secara eksplisit sehingga cocok dengan kelas model. Keuntungan dari pendekatan ini adalah menyimpan data. Buat perubahan ini secara manual atau dengan membuat skrip perubahan database.
- Gunakan Migrasi Pertama Kode untuk memperbarui skema database.
Untuk tutorial ini, gunakan Migrasi Pertama Kode.
SeedData Perbarui kelas sehingga memberikan nilai untuk kolom baru. Perubahan sampel ditunjukkan di bawah ini, tetapi buat perubahan ini untuk setiap new Movie blok.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Lihat file SeedData.cs yang telah selesai.
Membangun aplikasi
Tekan Ctrl+Shift+B
Menambahkan migrasi untuk bidang peringkat
Dari menu Alat , pilih NuGet Package Manager > Package Manager Console.
Di PMC, masukkan perintah berikut:
Add-Migration Rating Update-Database
Perintah Add-Migration memberi tahu kerangka kerja untuk:
- Bandingkan
Moviemodel denganMovieskema database. - Buat kode untuk memigrasikan skema database ke model baru.
Nama "Peringkat" bersifat arbitrer dan digunakan untuk memberi nama file migrasi. Sangat membantu untuk menggunakan nama yang bermakna untuk file migrasi.
Perintah Update-Database memberi tahu kerangka kerja untuk menerapkan perubahan skema ke database dan untuk mempertahankan data yang ada.
Hapus semua rekaman dalam database, penginisialisasi akan menyemai database dan menyertakan Rating bidang . Menghapus dapat dilakukan dengan tautan penghapusan di browser atau dari Sql Server Object Explorer (SSOX).
Opsi lain adalah menghapus database dan menggunakan migrasi untuk membuat ulang database. Untuk menghapus database di SSOX:
Pilih database di SSOX.
Klik kanan pada database, dan pilih Hapus.
Centang Tutup koneksi yang sudah ada.
Pilih OK.
Di PMC, perbarui database:
Update-Database
Jalankan aplikasi dan verifikasi bahwa Anda dapat membuat, mengedit, dan menampilkan film dengan Rating bidang. Jika database tidak seeded, atur titik henti dalam SeedData.Initialize metode .
Langkah selanjutnya
Di bagian ini, Migrasi Pertama Kode Kerangka Kerja Entitas digunakan untuk:
- Tambahkan bidang baru ke model.
- Migrasikan perubahan skema bidang baru ke database.
Saat menggunakan Kode EF Terlebih Dahulu untuk membuat dan melacak database secara otomatis, Kode Pertama:
-
__EFMigrationsHistoryMenambahkan tabel ke database untuk melacak apakah skema database sinkron dengan kelas model yang dihasilkannya. - Memberikan pengecualian jika kelas model tidak sinkron dengan database.
Verifikasi otomatis bahwa skema dan model sinkron memudahkan untuk menemukan masalah kode database yang tidak konsisten.
Menambahkan Properti Peringkat ke Model Film
Models/Movie.csBuka file dan tambahkanRatingproperti:public class Movie { public int Id { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Edit
Pages/Movies/Index.cshtml, dan tambahkanRatingbidang:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> | <a asp-page="./Details" asp-route-id="@item.Id">Details</a> | <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a> </td> </tr> } </tbody> </table>Perbarui halaman berikut dengan
Ratingbidang:
Aplikasi tidak akan berfungsi sampai database diperbarui untuk menyertakan bidang baru. Menjalankan aplikasi tanpa pembaruan ke database melempar :SqlException
SqlException: Invalid column name 'Rating'.
Pengecualian SqlException disebabkan oleh kelas model Film yang diperbarui berbeda dari skema tabel Film database. Tidak ada Rating kolom dalam tabel database.
Ada beberapa pendekatan untuk mengatasi kesalahan:
- Minta Kerangka Kerja Entitas secara otomatis menghilangkan dan membuat ulang database menggunakan skema kelas model baru. Pendekatan ini nyaman di awal siklus pengembangan, memungkinkan pengembang untuk dengan cepat mengembangkan model dan skema database bersama-sama. Kelemahannya adalah bahwa data yang ada dalam database hilang. Jangan gunakan pendekatan ini pada database produksi! Menghilangkan database pada perubahan skema dan menggunakan penginisialisasi untuk secara otomatis menyemai database dengan data pengujian sering kali merupakan cara produktif untuk mengembangkan aplikasi.
- Ubah skema database yang ada secara eksplisit sehingga cocok dengan kelas model. Keuntungan dari pendekatan ini adalah menyimpan data. Buat perubahan ini secara manual atau dengan membuat skrip perubahan database.
- Gunakan Migrasi Pertama Kode untuk memperbarui skema database.
Untuk tutorial ini, gunakan Migrasi Pertama Kode.
SeedData Perbarui kelas sehingga memberikan nilai untuk kolom baru. Perubahan sampel ditunjukkan di bawah ini, tetapi buat perubahan ini untuk setiap new Movie blok.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Lihat file SeedData.cs yang telah selesai.
Membangun aplikasi
Tekan Ctrl+Shift+B
Menambahkan migrasi untuk bidang peringkat
Dari menu Alat , pilih NuGet Package Manager > Package Manager Console.
Di PMC, masukkan perintah berikut:
Add-Migration Rating Update-Database
Perintah Add-Migration memberi tahu kerangka kerja untuk:
- Bandingkan
Moviemodel denganMovieskema database. - Buat kode untuk memigrasikan skema database ke model baru.
Nama "Peringkat" bersifat arbitrer dan digunakan untuk memberi nama file migrasi. Sangat membantu untuk menggunakan nama yang bermakna untuk file migrasi.
Perintah Update-Database memberi tahu kerangka kerja untuk menerapkan perubahan skema ke database dan untuk mempertahankan data yang ada.
Hapus semua rekaman dalam database, penginisialisasi akan menyemai database dan menyertakan Rating bidang . Menghapus dapat dilakukan dengan tautan penghapusan di browser atau dari Sql Server Object Explorer (SSOX).
Opsi lain adalah menghapus database dan menggunakan migrasi untuk membuat ulang database. Untuk menghapus database di SSOX:
Pilih database di SSOX.
Klik kanan pada database, dan pilih Hapus.
Centang Tutup koneksi yang sudah ada.
Pilih OK.
Di PMC, perbarui database:
Update-Database
Jalankan aplikasi dan verifikasi bahwa Anda dapat membuat, mengedit, dan menampilkan film dengan Rating bidang. Jika database tidak seeded, atur titik henti dalam SeedData.Initialize metode .
Langkah selanjutnya
Di bagian ini, Migrasi Pertama Kode Kerangka Kerja Entitas digunakan untuk:
- Tambahkan bidang baru ke model.
- Migrasikan perubahan skema bidang baru ke database.
Saat menggunakan Kode EF Terlebih Dahulu untuk membuat dan melacak database secara otomatis, Kode Pertama:
-
__EFMigrationsHistoryMenambahkan tabel ke database untuk melacak apakah skema database sinkron dengan kelas model yang dihasilkannya. - Memberikan pengecualian jika kelas model tidak sinkron dengan database.
Verifikasi otomatis bahwa skema dan model sinkron memudahkan untuk menemukan masalah kode database yang tidak konsisten.
Menambahkan Properti Peringkat ke Model Film
Models/Movie.csBuka file dan tambahkanRatingproperti:public class Movie { public int ID { get; set; } public string Title { get; set; } = string.Empty; [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } = string.Empty; }Edit
Pages/Movies/Index.cshtml, dan tambahkanRatingbidang:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> | <a asp-page="./Details" asp-route-id="@item.ID">Details</a> | <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a> </td> </tr> } </tbody> </table>Perbarui halaman berikut dengan
Ratingbidang:
Aplikasi tidak akan berfungsi sampai database diperbarui untuk menyertakan bidang baru. Menjalankan aplikasi tanpa pembaruan ke database melempar :SqlException
SqlException: Invalid column name 'Rating'.
Pengecualian SqlException disebabkan oleh kelas model Film yang diperbarui berbeda dari skema tabel Film database. Tidak ada Rating kolom dalam tabel database.
Ada beberapa pendekatan untuk mengatasi kesalahan:
- Minta Kerangka Kerja Entitas secara otomatis menghilangkan dan membuat ulang database menggunakan skema kelas model baru. Pendekatan ini nyaman di awal siklus pengembangan, memungkinkan pengembang untuk dengan cepat mengembangkan model dan skema database bersama-sama. Kelemahannya adalah bahwa data yang ada dalam database hilang. Jangan gunakan pendekatan ini pada database produksi! Menghilangkan database pada perubahan skema dan menggunakan penginisialisasi untuk secara otomatis menyemai database dengan data pengujian sering kali merupakan cara produktif untuk mengembangkan aplikasi.
- Ubah skema database yang ada secara eksplisit sehingga cocok dengan kelas model. Keuntungan dari pendekatan ini adalah menyimpan data. Buat perubahan ini secara manual atau dengan membuat skrip perubahan database.
- Gunakan Migrasi Pertama Kode untuk memperbarui skema database.
Untuk tutorial ini, gunakan Migrasi Pertama Kode.
SeedData Perbarui kelas sehingga memberikan nilai untuk kolom baru. Perubahan sampel ditunjukkan di bawah ini, tetapi buat perubahan ini untuk setiap new Movie blok.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Lihat file SeedData.cs yang telah selesai.
Bangun solusinya.
Menambahkan migrasi untuk bidang peringkat
Dari menu Alat , pilih NuGet Package Manager > Package Manager Console.
Di PMC, masukkan perintah berikut:
Add-Migration Rating Update-Database
Perintah Add-Migration memberi tahu kerangka kerja untuk:
- Bandingkan
Moviemodel denganMovieskema database. - Buat kode untuk memigrasikan skema database ke model baru.
Nama "Peringkat" bersifat arbitrer dan digunakan untuk memberi nama file migrasi. Sangat membantu untuk menggunakan nama yang bermakna untuk file migrasi.
Perintah Update-Database memberi tahu kerangka kerja untuk menerapkan perubahan skema ke database dan untuk mempertahankan data yang ada.
Hapus semua rekaman dalam database, penginisialisasi akan menyemai database dan menyertakan Rating bidang . Menghapus dapat dilakukan dengan tautan penghapusan di browser atau dari Sql Server Object Explorer (SSOX).
Opsi lain adalah menghapus database dan menggunakan migrasi untuk membuat ulang database. Untuk menghapus database di SSOX:
Pilih database di SSOX.
Klik kanan pada database, dan pilih Hapus.
Centang Tutup koneksi yang sudah ada.
Pilih OK.
Di PMC, perbarui database:
Update-Database
Jalankan aplikasi dan verifikasi bahwa Anda dapat membuat, mengedit, dan menampilkan film dengan Rating bidang. Jika database tidak seeded, atur titik henti dalam SeedData.Initialize metode .
Langkah selanjutnya
Lihat atau unduh sampel kode (cara mengunduh).
Di bagian ini, Migrasi Pertama Kode Kerangka Kerja Entitas digunakan untuk:
- Tambahkan bidang baru ke model.
- Migrasikan perubahan skema bidang baru ke database.
Saat menggunakan Kode EF Pertama untuk membuat database secara otomatis, Kode Pertama:
-
__EFMigrationsHistoryMenambahkan tabel ke database untuk melacak apakah skema database sinkron dengan kelas model yang dihasilkannya. - Jika kelas model tidak sinkron dengan database, EF akan memberikan pengecualian.
Verifikasi otomatis bahwa skema dan model sinkron memudahkan untuk menemukan masalah kode database yang tidak konsisten.
Menambahkan Properti Peringkat ke Model Film
Models/Movie.csBuka file dan tambahkanRatingproperti:public class Movie { public int ID { get; set; } public string Title { get; set; } [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } }Buat aplikasi.
Edit
Pages/Movies/Index.cshtml, dan tambahkanRatingbidang:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> | <a asp-page="./Details" asp-route-id="@item.ID">Details</a> | <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a> </td> </tr> } </tbody> </table>Perbarui halaman berikut dengan
Ratingbidang:
Aplikasi tidak akan berfungsi sampai database diperbarui untuk menyertakan bidang baru. Menjalankan aplikasi tanpa pembaruan ke database melempar :SqlException
SqlException: Invalid column name 'Rating'.
Pengecualian SqlException disebabkan oleh kelas model Film yang diperbarui berbeda dari skema tabel Film database. Tidak ada Rating kolom dalam tabel database.
Ada beberapa pendekatan untuk mengatasi kesalahan:
Minta Kerangka Kerja Entitas secara otomatis menghilangkan dan membuat ulang database menggunakan skema kelas model baru. Pendekatan ini nyaman di awal siklus pengembangan, memungkinkan Anda untuk dengan cepat mengembangkan model dan skema database bersama-sama. Kelemahannya adalah Anda kehilangan data yang ada dalam database. Jangan gunakan pendekatan ini pada database produksi! Menghilangkan database pada perubahan skema dan menggunakan penginisialisasi untuk secara otomatis menyemai database dengan data pengujian sering kali merupakan cara produktif untuk mengembangkan aplikasi.
Ubah skema database yang ada secara eksplisit sehingga cocok dengan kelas model. Keuntungan dari pendekatan ini adalah menyimpan data. Buat perubahan ini secara manual atau dengan membuat skrip perubahan database.
Gunakan Migrasi Pertama Kode untuk memperbarui skema database.
Untuk tutorial ini, gunakan Migrasi Pertama Kode.
SeedData Perbarui kelas sehingga memberikan nilai untuk kolom baru. Perubahan sampel ditunjukkan di bawah ini, tetapi buat perubahan ini untuk setiap new Movie blok.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Lihat file SeedData.cs yang telah selesai.
Bangun solusinya.
Menambahkan migrasi untuk bidang peringkat
Dari menu Alat , pilih NuGet Package Manager > Package Manager Console.
Di PMC, masukkan perintah berikut:
Add-Migration Rating Update-Database
Perintah Add-Migration memberi tahu kerangka kerja untuk:
- Bandingkan
Moviemodel denganMovieskema database. - Buat kode untuk memigrasikan skema database ke model baru.
Nama "Peringkat" bersifat arbitrer dan digunakan untuk memberi nama file migrasi. Sangat membantu untuk menggunakan nama yang bermakna untuk file migrasi.
Perintah Update-Database memberi tahu kerangka kerja untuk menerapkan perubahan skema ke database dan untuk mempertahankan data yang ada.
Hapus semua rekaman dalam database, penginisialisasi akan menyemai database dan menyertakan Rating bidang . Menghapus dapat dilakukan dengan tautan penghapusan di browser atau dari Sql Server Object Explorer (SSOX).
Opsi lain adalah menghapus database dan menggunakan migrasi untuk membuat ulang database. Untuk menghapus database di SSOX:
Pilih database di SSOX.
Klik kanan pada database, dan pilih Hapus.
Centang Tutup koneksi yang sudah ada.
Pilih OK.
Di PMC, perbarui database:
Update-Database
Jalankan aplikasi dan verifikasi bahwa Anda dapat membuat/mengedit/menampilkan film dengan Rating bidang. Jika database tidak seeded, atur titik henti dalam SeedData.Initialize metode .
Langkah selanjutnya
Lihat atau unduh sampel kode (cara mengunduh).
Di bagian ini, Migrasi Pertama Kode Kerangka Kerja Entitas digunakan untuk:
- Tambahkan bidang baru ke model.
- Migrasikan perubahan skema bidang baru ke database.
Saat menggunakan Kode EF Pertama untuk membuat database secara otomatis, Kode Pertama:
-
__EFMigrationsHistoryMenambahkan tabel ke database untuk melacak apakah skema database sinkron dengan kelas model yang dihasilkannya. - Jika kelas model tidak sinkron dengan database, EF akan memberikan pengecualian.
Verifikasi otomatis bahwa skema dan model sinkron memudahkan untuk menemukan masalah kode database yang tidak konsisten.
Menambahkan Properti Peringkat ke Model Film
Models/Movie.csBuka file dan tambahkanRatingproperti:public class Movie { public int ID { get; set; } public string Title { get; set; } [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } [Column(TypeName = "decimal(18, 2)")] public decimal Price { get; set; } public string Rating { get; set; } }Buat aplikasi.
Edit
Pages/Movies/Index.cshtml, dan tambahkanRatingbidang:@page @model RazorPagesMovie.Pages.Movies.IndexModel @{ ViewData["Title"] = "Index"; } <h1>Index</h1> <p> <a asp-page="Create">Create New</a> </p> <form> <p> <select asp-for="MovieGenre" asp-items="Model.Genres"> <option value="">All</option> </select> <label>Title: <input type="text" asp-for="SearchString" /></label> <input type="submit" value="Filter" /> </p> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Movie[0].Title) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Genre) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Price) </th> <th> @Html.DisplayNameFor(model => model.Movie[0].Rating) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Movie) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> | <a asp-page="./Details" asp-route-id="@item.ID">Details</a> | <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a> </td> </tr> } </tbody> </table>Perbarui halaman berikut dengan
Ratingbidang:
Aplikasi tidak akan berfungsi sampai database diperbarui untuk menyertakan bidang baru. Menjalankan aplikasi tanpa pembaruan ke database melempar :SqlException
SqlException: Invalid column name 'Rating'.
Pengecualian SqlException disebabkan oleh kelas model Film yang diperbarui berbeda dari skema tabel Film database. Tidak ada Rating kolom dalam tabel database.
Ada beberapa pendekatan untuk mengatasi kesalahan:
Minta Kerangka Kerja Entitas secara otomatis menghilangkan dan membuat ulang database menggunakan skema kelas model baru. Pendekatan ini nyaman di awal siklus pengembangan, memungkinkan Anda untuk dengan cepat mengembangkan model dan skema database bersama-sama. Kelemahannya adalah Anda kehilangan data yang ada dalam database. Jangan gunakan pendekatan ini pada database produksi! Menghilangkan database pada perubahan skema dan menggunakan penginisialisasi untuk secara otomatis menyemai database dengan data pengujian sering kali merupakan cara produktif untuk mengembangkan aplikasi.
Ubah skema database yang ada secara eksplisit sehingga cocok dengan kelas model. Keuntungan dari pendekatan ini adalah menyimpan data. Buat perubahan ini secara manual atau dengan membuat skrip perubahan database.
Gunakan Migrasi Pertama Kode untuk memperbarui skema database.
Untuk tutorial ini, gunakan Migrasi Pertama Kode.
SeedData Perbarui kelas sehingga memberikan nilai untuk kolom baru. Perubahan sampel ditunjukkan di bawah ini, tetapi buat perubahan ini untuk setiap new Movie blok.
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M,
Rating = "R"
},
Lihat file SeedData.cs yang telah selesai.
Bangun solusinya.
Menambahkan migrasi untuk bidang peringkat
Dari menu Alat , pilih NuGet Package Manager > Package Manager Console.
Di PMC, masukkan perintah berikut:
Add-Migration Rating Update-Database
Perintah Add-Migration memberi tahu kerangka kerja untuk:
- Bandingkan
Moviemodel denganMovieskema database. - Buat kode untuk memigrasikan skema database ke model baru.
Nama "Peringkat" bersifat arbitrer dan digunakan untuk memberi nama file migrasi. Sangat membantu untuk menggunakan nama yang bermakna untuk file migrasi.
Perintah Update-Database memberi tahu kerangka kerja untuk menerapkan perubahan skema ke database dan untuk mempertahankan data yang ada.
Jika Anda menghapus semua rekaman dalam database, penginisialisasi akan menyemai database dan menyertakan Rating bidang . Anda dapat melakukan ini dengan tautan penghapusan di browser atau dari Sql Server Object Explorer (SSOX).
Opsi lain adalah menghapus database dan menggunakan migrasi untuk membuat ulang database. Untuk menghapus database di SSOX:
Pilih database di SSOX.
Klik kanan pada database, dan pilih Hapus.
Centang Tutup koneksi yang sudah ada.
Pilih OK.
Di PMC, perbarui database:
Update-Database
Jalankan aplikasi dan verifikasi bahwa Anda dapat membuat/mengedit/menampilkan film dengan Rating bidang. Jika database tidak seeded, atur titik henti dalam SeedData.Initialize metode .
Langkah selanjutnya
ASP.NET Core