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

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Gönderen Rick Anderson

Bu bölümde Entity Framework Kodu İlk Geçişler ş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 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 Dosyayı 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 dönemlerinde kullanışlıdır ve geliştiricilerin model ve veritabanı şemasını birlikte hızla geliştirmesine olanak tanır. Bunun dezavantajı, veritabanındaki mevcut verilerin kaybolmasıdır. Bu yaklaşımı üretim veritabanında 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 üretken bir yoludur.
  2. Var olan veritabanının şemasını model sınıflarının eşleşmesi için 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.

Uygulamayı oluşturma

Ctrl+Shift B tuşlarına basın +

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, Add-Migration çerçeveye ş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'ndeki (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ı tohumlanmamışsa yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Sonraki adımlar

Bu bölümde Entity Framework Kodu İlk Geçişler ş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 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 Dosyayı 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 dönemlerinde kullanışlıdır ve geliştiricilerin model ve veritabanı şemasını birlikte hızla geliştirmesine olanak tanır. Bunun dezavantajı, veritabanındaki mevcut verilerin kaybolmasıdır. Bu yaklaşımı üretim veritabanında 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 üretken bir yoludur.
  2. Var olan veritabanının şemasını model sınıflarının eşleşmesi için 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.

Uygulamayı oluşturma

Ctrl+Shift B tuşlarına basın +

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, Add-Migration çerçeveye ş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'ndeki (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ı tohumlanmamışsa yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Sonraki adımlar

Bu bölümde Entity Framework Kodu İlk Geçişler ş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 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 Dosyayı 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 dönemlerinde kullanışlıdır ve geliştiricilerin model ve veritabanı şemasını birlikte hızla geliştirmesine olanak tanır. Bunun dezavantajı, veritabanındaki mevcut verilerin kaybolmasıdır. Bu yaklaşımı üretim veritabanında 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 üretken bir yoludur.
  2. Var olan veritabanının şemasını model sınıflarının eşleşmesi için 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ü oluşturun.

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, Add-Migration çerçeveye ş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'ndeki (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ı tohumlanmamışsa yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Sonraki adımlar

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

Bu bölümde Entity Framework Kodu İlk Geçişler ş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ş 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 Dosyayı 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 dönemlerinde kullanışlıdır ve model ve veritabanı şemasını birlikte hızla geliştirmenizi sağlar. Bunun dezavantajı, veritabanındaki mevcut verileri kaybetmenizdir. Bu yaklaşımı üretim veritabanında 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 üretken bir yoludur.

  2. Var olan veritabanının şemasını model sınıflarının eşleşmesi için 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ü oluşturun.

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, Add-Migration çerçeveye ş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'ndeki (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ı tohumlanmamışsa yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Sonraki adımlar

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

Bu bölümde Entity Framework Kodu İlk Geçişler ş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ş 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 Dosyayı 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 dönemlerinde kullanışlıdır ve model ve veritabanı şemasını birlikte hızla geliştirmenizi sağlar. Bunun dezavantajı, veritabanındaki mevcut verileri kaybetmenizdir. Bu yaklaşımı üretim veritabanında 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 üretken bir yoludur.

  2. Var olan veritabanının şemasını model sınıflarının eşleşmesi için 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ü oluşturun.

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, Add-Migration çerçeveye ş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ı silerseniz, başlatıcı veritabanının tohumunu oluşturur ve alanını ekler Rating . Bunu, tarayıcıdaki veya Sql Server Nesne Gezgini'ndeki (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.

  • Var olan 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ı tohumlanmamışsa yönteminde SeedData.Initialize bir kesme noktası ayarlayın.

Sonraki adımlar