7. Bölüm, ASP.NET Core'da sayfaya yeni alan Razor ekleme

Gönderen Rick Anderson

Bu bölümde Entity Framework Code First Migrations şunları yapmak için kullanılır:

  • Modele yeni bir alan ekleyin.
  • Yeni alan şeması değişikliğini veritabanına geçirin.

Bir veritabanını otomatik olarak oluşturmak ve izlemek için EF Code First kullanırken Code First:

  • Veritabanının şemasının oluşturulduğu model sınıflarıyla eşitlenip eşitlenmediğini izlemek için veritabanına bir __EFMigrationsHistory tablo ekler.
  • Model sınıfları veritabanıyla eşitlenmemişse bir özel durum oluşturur.

Şema ve modelin eşitlenmiş olduğunu otomatik doğrulama, tutarsız veritabanı kodu sorunlarını bulmayı kolaylaştırır.

Film Modeline Derecelendirme Özelliği Ekleme

  1. Models/Movie.cs Dosyasını açın ve bir Rating özellik ekleyin:

    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;
    }
    
  2. öğesini düzenleyin Pages/Movies/Index.cshtmlve bir Rating alan ekleyin:

    @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>
            Title: <input type="text" asp-for="SearchString" />
            <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>
    
  3. Aşağıdaki sayfaları bir Rating alanla güncelleştirin:

Veritabanı yeni alanı içerecek şekilde güncelleştirilene kadar uygulama çalışmaz. Veritabanını güncelleştirmeden uygulamayı çalıştırmak bir SqlExceptionoluşturur:

SqlException: Invalid column name 'Rating'.

Özel SqlException durum, güncelleştirilmiş Movie model sınıfının veritabanının Movie tablosunun şemasından farklı olmasından kaynaklanır. Veritabanı tablosunda sütun yok Rating .

Hatayı çözmek için birkaç yaklaşım vardır:

  1. Entity Framework'ün yeni model sınıfı şemasını kullanarak veritabanını otomatik olarak bırakmasını ve yeniden oluşturmasını sağlayın. Bu yaklaşım geliştirme döngüsünün erken aşamalarında kullanışlıdır ve geliştiricilerin modeli ve veritabanı şemasını birlikte hızla geliştirmesine olanak tanır. Bunun dezavantajı, veritabanındaki mevcut verilerin kaybolmasıdır. Üretim veritabanında bu yaklaşımı kullanmayın! Veritabanını şema değişikliklerine bırakmak ve test verileriyle veritabanını otomatik olarak görmek için başlatıcı kullanmak genellikle uygulama geliştirmenin verimli bir yoludur.
  2. Var olan veritabanının şemasını model sınıfları ile eşleşsin diye açıkça değiştirin. Bu yaklaşımın avantajı verileri korumaktır. Bu değişikliği el ile veya veritabanı değişiklik betiği oluşturarak yapın.
  3. Veritabanı şemasını güncelleştirmek için Code First Migrations kullanın.

Bu öğretici için Code First Migrations kullanın.

sınıfını SeedData yeni sütun için bir değer sağlayacak şekilde güncelleştirin. Aşağıda örnek bir değişiklik gösterilir, ancak her new Movie blok için bu değişikliği yapın.

context.Movie.AddRange(
    new Movie
    {
        Title = "When Harry Met Sally",
        ReleaseDate = DateTime.Parse("1989-2-12"),
        Genre = "Romantic Comedy",
        Price = 7.99M,
        Rating = "R"
    },

Tamamlanmış SeedData.cs dosyasına bakın.

Çözümü derleyin.

Derecelendirme alanı için geçiş ekleme

  1. Araçlar menüsünde NuGet Paket Yöneticisi Paket Yöneticisi > Konsolu'nu seçin.

  2. PMC'de aşağıdaki komutları girin:

    Add-Migration Rating
    Update-Database
    

komutu çerçeveye Add-Migration şunu söyler:

  • Movie Modeli veritabanı şemasıyla Movie karşılaştırın.
  • Veritabanı şemasını yeni modele geçirmek için kod oluşturun.

"Derecelendirme" adı rastgeledir ve geçiş dosyasını adlandırmak için kullanılır. Geçiş dosyası için anlamlı bir ad kullanmak yararlı olur.

komutu, Update-Database çerçeveye veritabanına şema değişikliklerini uygulamasını ve mevcut verileri korumasını söyler.

Veritabanındaki tüm kayıtları sildiğinizde başlatıcı veritabanının tohumunu oluşturur ve alanı ekler Rating . Silme işlemi tarayıcıdaki silme bağlantılarıyla veya Sql Server Nesne Gezgini 'dan (SSOX) yapılabilir.

Bir diğer seçenek de veritabanını silmek ve veritabanını yeniden oluşturmak için geçişleri kullanmaktır. SSOX'ta veritabanını silmek için:

  1. SSOX'ta veritabanını seçin.

  2. Veritabanına sağ tıklayın ve Sil'i seçin.

  3. Mevcut bağlantıları kapat'ı işaretleyin.

  4. Tamam’ı seçin.

  5. PMC'de veritabanını güncelleştirin:

    Update-Database
    

Uygulamayı çalıştırın ve bir Rating alanla film oluşturabildiğinizi, düzenleyebildiğinizi ve görüntüleyebildiğinizi doğrulayın. Veritabanı dengeli değilse yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Ek kaynaklar

Örnek kodu görüntüleme veya indirme (indirme).

Bu bölümde Entity Framework Code First Migrations şunları yapmak için kullanılır:

  • Modele yeni bir alan ekleyin.
  • Yeni alan şeması değişikliğini veritabanına geçirin.

Otomatik olarak veritabanı oluşturmak için EF Code First kullanırken Code First:

  • Veritabanının şemasının oluşturulduğu model sınıflarıyla eşitlenip eşitlenmediğini izlemek için veritabanına bir __EFMigrationsHistory tablo ekler.
  • Model sınıfları veritabanıyla eşitlenmemişse EF bir özel durum oluşturur.

Şema ve modelin eşitlenmiş durumda olduğunu otomatik doğrulama, tutarsız veritabanı kodu sorunlarını bulmayı kolaylaştırır.

Film Modeline Derecelendirme Özelliği Ekleme

  1. Models/Movie.cs Dosyasını açın ve bir Rating özellik ekleyin:

    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; }
    }
    
  2. Uygulamayı oluşturun.

  3. öğesini düzenleyin Pages/Movies/Index.cshtmlve bir Rating alan ekleyin:

    @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>
            Title: <input type="text" asp-for="SearchString" />
            <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>
    
  4. Aşağıdaki sayfaları bir Rating alanla güncelleştirin:

Veritabanı yeni alanı içerecek şekilde güncelleştirilene kadar uygulama çalışmaz. Veritabanını güncelleştirmeden uygulamayı çalıştırmak bir SqlExceptionoluşturur:

SqlException: Invalid column name 'Rating'.

Bunun SqlException nedeni güncelleştirilmiş Movie model sınıfının veritabanının Movie tablosunun şemasından farklı olmasıdır. Veritabanı tablosunda sütun yok Rating .

Hatayı çözmek için birkaç yaklaşım vardır:

  1. Entity Framework'ün yeni model sınıfı şemasını kullanarak veritabanını otomatik olarak bırakmasını ve yeniden oluşturmasını sağlayın. Bu yaklaşım geliştirme döngüsünün erken aşamalarında kullanışlıdır ve modeli ve veritabanı şemasını birlikte hızlı bir şekilde geliştirmenizi sağlar. Dezavantajı, veritabanındaki mevcut verileri kaybetmenizdir. Üretim veritabanında bu yaklaşımı kullanmayın! Veritabanını şema değişikliklerine bırakmak ve test verileriyle veritabanını otomatik olarak dengeli hale getirmek için bir başlatıcı kullanmak genellikle uygulama geliştirmenin verimli bir yoludur.

  2. Var olan veritabanının şemasını model sınıflarını eşleştirebilecek şekilde açıkça değiştirin. Bu yaklaşımın avantajı, verileri korumaktır. Bu değişikliği el ile veya veritabanı değişiklik betiği oluşturarak yapın.

  3. Veritabanı şemasını güncelleştirmek için Code First Migrations kullanın.

Bu öğretici için Code First Migrations kullanın.

sınıfını SeedData yeni sütun için bir değer sağlayacak şekilde güncelleştirin. Aşağıda örnek bir değişiklik gösterilir, ancak her new Movie blok için bu değişikliği yapın.

context.Movie.AddRange(
    new Movie
    {
        Title = "When Harry Met Sally",
        ReleaseDate = DateTime.Parse("1989-2-12"),
        Genre = "Romantic Comedy",
        Price = 7.99M,
        Rating = "R"
    },

Tamamlanmış SeedData.cs dosyasına bakın.

Çözümü derleyin.

Derecelendirme alanı için geçiş ekleme

  1. Araçlar menüsünde NuGet Paket Yöneticisi Paket Yöneticisi > Konsolu'nu seçin.

  2. PMC'de aşağıdaki komutları girin:

    Add-Migration Rating
    Update-Database
    

komutu çerçeveye Add-Migration şunu söyler:

  • Movie Modeli veritabanı şemasıyla Movie karşılaştırın.
  • Veritabanı şemasını yeni modele geçirmek için kod oluşturun.

"Derecelendirme" adı rastgeledir ve geçiş dosyasını adlandırmak için kullanılır. Geçiş dosyası için anlamlı bir ad kullanmak yararlı olur.

komutu, Update-Database çerçeveye şema değişikliklerini veritabanına uygulamasını ve mevcut verileri korumasını söyler.

Veritabanındaki tüm kayıtları sildiğinizde başlatıcı veritabanının tohumunu oluşturur ve alanını ekler Rating . Silme işlemi, tarayıcıdaki veya Sql Server Nesne Gezgini 'den (SSOX) silme bağlantıları ile yapılabilir.

Bir diğer seçenek de veritabanını silmek ve veritabanını yeniden oluşturmak için geçişleri kullanmaktır. SSOX'ta veritabanını silmek için:

  1. SSOX'ta veritabanını seçin.

  2. Veritabanına sağ tıklayın ve Sil'i seçin.

  3. Var olan bağlantıları kapat'ı işaretleyin.

  4. Tamam’ı seçin.

  5. PMC'de veritabanını güncelleştirin:

    Update-Database
    

Uygulamayı çalıştırın ve bir Rating alanla film oluşturabildiğinizi/düzenleyebildiğinizi/görüntüleyebildiğinizi doğrulayın. Veritabanı dengeli değilse, yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Ek kaynaklar

Örnek kodu görüntüleme veya indirme (indirme).

Bu bölümde Entity Framework Code First Migrations şunları yapmak için kullanılır:

  • Modele yeni bir alan ekleyin.
  • Yeni alan şeması değişikliğini veritabanına geçirin.

Otomatik olarak veritabanı oluşturmak için EF Code First kullanırken Code First:

  • Veritabanının şemasının oluşturulduğu model sınıflarıyla eşitlenip eşitlenmediğini izlemek için veritabanına bir __EFMigrationsHistory tablo ekler.
  • Model sınıfları veritabanıyla eşitlenmemişse EF bir özel durum oluşturur.

Şema ve modelin eşitlenmiş durumda olduğunu otomatik doğrulama, tutarsız veritabanı kodu sorunlarını bulmayı kolaylaştırır.

Film Modeline Derecelendirme Özelliği Ekleme

  1. Models/Movie.cs Dosyasını açın ve bir Rating özellik ekleyin:

    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; }
    }
    
  2. Uygulamayı oluşturun.

  3. öğesini düzenleyin Pages/Movies/Index.cshtmlve bir Rating alan ekleyin:

    @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>
            Title: <input type="text" asp-for="SearchString" />
            <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>
    
  4. Aşağıdaki sayfaları bir Rating alanla güncelleştirin:

Veritabanı yeni alanı içerecek şekilde güncelleştirilene kadar uygulama çalışmaz. Veritabanını güncelleştirmeden uygulamayı çalıştırmak bir SqlExceptionoluşturur:

SqlException: Invalid column name 'Rating'.

Özel SqlException durum, güncelleştirilmiş Movie model sınıfının veritabanının Movie tablosunun şemasından farklı olmasından kaynaklanır. Veritabanı tablosunda sütun yok Rating .

Hatayı çözmek için birkaç yaklaşım vardır:

  1. Entity Framework'ün yeni model sınıfı şemasını kullanarak veritabanını otomatik olarak bırakmasını ve yeniden oluşturmasını sağlayın. Bu yaklaşım geliştirme döngüsünün erken aşamalarında kullanışlıdır ve modeli ve veritabanı şemasını birlikte hızla geliştirmenizi sağlar. Dezavantajı, veritabanındaki mevcut verileri kaybetmenizdir. Üretim veritabanında bu yaklaşımı kullanmayın! Veritabanını şema değişikliklerine bırakmak ve test verileriyle veritabanını otomatik olarak görmek için başlatıcı kullanmak genellikle uygulama geliştirmenin verimli bir yoludur.

  2. Var olan veritabanının şemasını model sınıfları ile eşleşsin diye açıkça değiştirin. Bu yaklaşımın avantajı verileri korumaktır. Bu değişikliği el ile veya veritabanı değişiklik betiği oluşturarak yapın.

  3. Veritabanı şemasını güncelleştirmek için Code First Migrations kullanın.

Bu öğretici için Code First Migrations kullanın.

sınıfını SeedData yeni sütun için bir değer sağlayacak şekilde güncelleştirin. Aşağıda örnek bir değişiklik gösterilir, ancak her new Movie blok için bu değişikliği yapın.

context.Movie.AddRange(
    new Movie
    {
        Title = "When Harry Met Sally",
        ReleaseDate = DateTime.Parse("1989-2-12"),
        Genre = "Romantic Comedy",
        Price = 7.99M,
        Rating = "R"
    },

Tamamlanmış SeedData.cs dosyasına bakın.

Çözümü derleyin.

Derecelendirme alanı için geçiş ekleme

  1. Araçlar menüsünde NuGet Paket Yöneticisi Paket Yöneticisi > Konsolu'nu seçin.

  2. PMC'de aşağıdaki komutları girin:

    Add-Migration Rating
    Update-Database
    

komutu çerçeveye Add-Migration şunu söyler:

  • Movie Modeli veritabanı şemasıyla Movie karşılaştırın.
  • Veritabanı şemasını yeni modele geçirmek için kod oluşturun.

"Derecelendirme" adı rastgeledir ve geçiş dosyasını adlandırmak için kullanılır. Geçiş dosyası için anlamlı bir ad kullanmak yararlı olur.

komutu, Update-Database çerçeveye veritabanına şema değişikliklerini uygulamasını ve mevcut verileri korumasını söyler.

Veritabanındaki tüm kayıtları silerseniz başlatıcı veritabanının tohumunu oluşturur ve alanı ekler Rating . Bunu, tarayıcıdaki veya Sql Server Nesne Gezgini'daki (SSOX) silme bağlantılarıyla yapabilirsiniz.

Bir diğer seçenek de veritabanını silmek ve veritabanını yeniden oluşturmak için geçişleri kullanmaktır. SSOX'ta veritabanını silmek için:

  • SSOX'ta veritabanını seçin.

  • Veritabanına sağ tıklayın ve Sil'i seçin.

  • Mevcut bağlantıları kapat'ı işaretleyin.

  • Tamam’ı seçin.

  • PMC'de veritabanını güncelleştirin:

    Update-Database
    

Uygulamayı çalıştırın ve bir Rating alanla film oluşturabildiğinizi/düzenleyebildiğinizi/görüntüleyebildiğinizi doğrulayın. Veritabanı dengeli değilse yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Ek kaynaklar

Bu bölümde Entity Framework Code First Migrations şunları yapmak için kullanılır:

  • Modele yeni bir alan ekleyin.
  • Yeni alan şeması değişikliğini veritabanına geçirin.

Bir veritabanını otomatik olarak oluşturmak ve izlemek için EF Code First kullanırken Code First:

  • Veritabanının şemasının oluşturulduğu model sınıflarıyla eşitlenip eşitlenmediğini izlemek için veritabanına bir __EFMigrationsHistory tablo ekler.
  • Model sınıfları veritabanıyla eşitlenmemişse bir özel durum oluşturur.

Şema ve modelin eşitlenmiş olduğunu otomatik doğrulama, tutarsız veritabanı kodu sorunlarını bulmayı kolaylaştırır.

Film Modeline Derecelendirme Özelliği Ekleme

  1. Models/Movie.cs Dosyasını açın ve bir Rating özellik ekleyin:

    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;
    }
    
  2. öğesini düzenleyin Pages/Movies/Index.cshtmlve bir Rating alan ekleyin:

    @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>
            Title: <input type="text" asp-for="SearchString" />
            <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>
    
  3. Aşağıdaki sayfaları bir Rating alanla güncelleştirin:

Veritabanı yeni alanı içerecek şekilde güncelleştirilene kadar uygulama çalışmaz. Veritabanını güncelleştirmeden uygulamayı çalıştırmak bir SqlExceptionoluşturur:

SqlException: Invalid column name 'Rating'.

Özel SqlException durum, güncelleştirilmiş Movie model sınıfının veritabanının Movie tablosunun şemasından farklı olmasından kaynaklanır. Veritabanı tablosunda sütun yok Rating .

Hatayı çözmek için birkaç yaklaşım vardır:

  1. Entity Framework'ün yeni model sınıfı şemasını kullanarak veritabanını otomatik olarak bırakmasını ve yeniden oluşturmasını sağlayın. Bu yaklaşım geliştirme döngüsünün erken aşamalarında kullanışlıdır ve geliştiricilerin modeli ve veritabanı şemasını birlikte hızla geliştirmesine olanak tanır. Bunun dezavantajı, veritabanındaki mevcut verilerin kaybolmasıdır. Üretim veritabanında bu yaklaşımı kullanmayın! Veritabanını şema değişikliklerine bırakmak ve test verileriyle veritabanını otomatik olarak görmek için başlatıcı kullanmak genellikle uygulama geliştirmenin verimli bir yoludur.
  2. Var olan veritabanının şemasını model sınıfları ile eşleşsin diye açıkça değiştirin. Bu yaklaşımın avantajı verileri korumaktır. Bu değişikliği el ile veya veritabanı değişiklik betiği oluşturarak yapın.
  3. Veritabanı şemasını güncelleştirmek için Code First Migrations kullanın.

Bu öğretici için Code First Migrations kullanın.

sınıfını SeedData yeni sütun için bir değer sağlayacak şekilde güncelleştirin. Aşağıda örnek bir değişiklik gösterilir, ancak her new Movie blok için bu değişikliği yapın.

context.Movie.AddRange(
    new Movie
    {
        Title = "When Harry Met Sally",
        ReleaseDate = DateTime.Parse("1989-2-12"),
        Genre = "Romantic Comedy",
        Price = 7.99M,
        Rating = "R"
    },

Tamamlanmış SeedData.cs dosyasına bakın.

Çözümü derleyin.

Derecelendirme alanı için geçiş ekleme

  1. Araçlar menüsünde NuGet Paket Yöneticisi Paket Yöneticisi > Konsolu'nu seçin.

  2. PMC'de aşağıdaki komutları girin:

    Add-Migration Rating
    Update-Database
    

komutu çerçeveye Add-Migration şunu söyler:

  • Movie Modeli veritabanı şemasıyla Movie karşılaştırın.
  • Veritabanı şemasını yeni modele geçirmek için kod oluşturun.

"Derecelendirme" adı rastgeledir ve geçiş dosyasını adlandırmak için kullanılır. Geçiş dosyası için anlamlı bir ad kullanmak yararlı olur.

komutu, Update-Database çerçeveye şema değişikliklerini veritabanına uygulamasını ve mevcut verileri korumasını söyler.

Veritabanındaki tüm kayıtları sildiğinizde başlatıcı veritabanının tohumunu oluşturur ve alanını ekler Rating . Silme işlemi, tarayıcıdaki veya Sql Server Nesne Gezgini 'den (SSOX) silme bağlantıları ile yapılabilir.

Bir diğer seçenek de veritabanını silmek ve veritabanını yeniden oluşturmak için geçişleri kullanmaktır. SSOX'ta veritabanını silmek için:

  1. SSOX'ta veritabanını seçin.

  2. Veritabanına sağ tıklayın ve Sil'i seçin.

  3. Var olan bağlantıları kapat'ı işaretleyin.

  4. Tamam’ı seçin.

  5. PMC'de veritabanını güncelleştirin:

    Update-Database
    

Uygulamayı çalıştırın ve bir Rating alanla film oluşturabildiğinizi, düzenleyebildiğinizi ve görüntüleyebildiğinizi doğrulayın. Veritabanı dengeli değilse, yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Ek kaynaklar