Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Rick Anderson
Not
Bu öğreticinin ASP.NET MVC 5 ve Visual Studio 2013 kullanan güncelleştirilmiş bir sürümü burada sağlanır. Daha güvenlidir, takip etmek çok daha kolaydır ve daha fazla özellik gösterir.
Bu bölümde, değişiklik veritabanına uygulanabilmesi için model sınıflarına bazı değişiklikleri geçirmek için Entity Framework Code First Migrations kullanacaksınız.
Varsayılan olarak, bu öğreticinin önceki bölümlerinde yaptığınız gibi otomatik olarak veritabanı oluşturmak için Entity Framework Code First kullandığınızda Code First, veritabanının şemasının oluşturulduğu model sınıflarıyla eşitlenmiş olup olmadığını izlemeye yardımcı olmak için veritabanına bir tablo ekler. Eşitlenmemişlerse Entity Framework bir hata oluşturur. Bu, geliştirme zamanında yalnızca çalışma zamanında bulabileceğiniz (belirsiz hatalarla) sorunları izlemeyi kolaylaştırır.
Model Değişiklikleri için Kod İlk Geçişlerini Ayarlama
Visual Studio 2012 kullanıyorsanız, veritabanı aracını açmak için Çözüm Gezgini Movies.mdf dosyasına çift tıklayın. Web için Visual Studio Express Veritabanı Gezgini'ne, Visual Studio 2012'de Sunucu Gezgini'ne gösterilir. Visual Studio 2010 kullanıyorsanız SQL Server Nesne Gezgini kullanın.
Veritabanı aracında (Veritabanı Gezgini, Sunucu Gezgini veya SQL Server Nesne Gezgini), film veritabanını bırakmak için sağ tıklayın MovieDBContext ve Sil'i seçin.

Çözüm Gezgini'a geri dönün. film veritabanını kaldırmak için Movies.mdf dosyasına sağ tıklayın ve Sil'i seçin.

Hata olmadığından emin olmak için uygulamayı derleyin.
Araçlar menüsünden NuGet Paket Yöneticisi’ne ve ardından Paket Yöneticisi Konsolu’na tıklayın.

Paket Yöneticisi Konsolu penceresindeki istemde PM> "Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDBContext" yazın.

Geçişleri Etkinleştir komutu (yukarıda gösterilmiştir) yeni bir Migrations klasöründe Configuration.cs dosyası oluşturur.

Visual Studio Configuration.cs dosyasını açar. Seed Configuration.cs dosyasındaki yöntemini aşağıdaki kodla değiştirin:
protected override void Seed(MvcMovie.Models.MovieDBContext context)
{
context.Movies.AddOrUpdate( i => i.Title,
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
}
altındaki Movie kırmızı dalgalı çizgiye sağ tıklayın ve Çözümle'yi seçip MvcMovie.Models'i kullanarak;

Bunu yaptığınızda aşağıdaki using deyimi eklenir:
using MvcMovie.Models;
Not
Code First Migrations, her geçiş sonrasında Seed yöntemini çağırır (başka bir ifadeyle Paket Yöneticisi Konsolunda update-database çağrılır) ve bu yöntem zaten eklenmiş olan satırları güncelleştirir veya henüz yoksa bunları ekler.
Projeyi oluşturmak için CTRL-SHIFT-B tuşlarına basın.(Bu noktada derlemezseniz aşağıdaki adımlar başarısız olur.)
Sonraki adım, ilk geçiş için bir DbMigration sınıf oluşturmaktır. Yeni bir veritabanı oluşturmak için yapılan bu geçiş, önceki bir adımda movie.mdf dosyasını silmenin nedeni budur.
Paket Yöneticisi Konsolu penceresinde, ilk geçişi oluşturmak için "add-migration Initial" komutunu girin. "Initial" adı rastgeledir ve oluşturulan geçiş dosyasını adlandırmak için kullanılır.

Code First Migrations, Migrations klasöründe ({DateStamp}_Initial.cs) başka bir sınıf dosyası oluşturur ve bu sınıf veritabanı şemasını oluşturan kodu içerir. Geçiş dosya adı, sıralamaya yardımcı olmak için bir zaman damgasıyla önceden düzeltildi. {DateStamp}_Initial.cs dosyasını inceleyin, Film VERITABANı için Filmler tablosunu oluşturma yönergelerini içerir. Aşağıdaki yönergelerde veritabanını güncelleştirdiğinizde, bu {DateStamp}_Initial.cs dosyası çalışır ve VERITABANı şemasını oluşturur. Ardından Seed yöntemi çalıştırarak veritabanını test verileriyle doldurur.
veritabanını oluşturmak ve Seed yöntemini çalıştırmak için Paket Yöneticisi Konsolu'nda "update-database" komutunu girin.

Bir tablonun zaten var olduğunu ve oluşturulamadığını belirten bir hata alırsanız, bunun nedeni büyük olasılıkla veritabanını sildikten sonra ve yürütmeden update-databaseönce uygulamayı çalıştırmanızdır. Bu durumda, Movies.mdf dosyasını yeniden silin ve komutu yeniden deneyinupdate-database. Hata almaya devam ederseniz, geçişler klasörünü ve içeriğini silin ve ardından bu sayfanın üst kısmındaki yönergelerle başlayın (Movies.mdf dosyasını silin ve ardından Enable-Migrations'a geçin).
Uygulamayı çalıştırın ve /Filmler URL'sine gidin. Tohum verileri görüntülenir.

Film Modeline Derecelendirme Özelliği Ekleme
Mevcut Movie sınıfa yeni Rating bir özellik ekleyerek başlayın. Models\Movie.cs dosyasını açın ve aşağıdakine benzer bir özellik ekleyinRating:
public string Rating { get; set; }
Sınıfın tamamı Movie artık aşağıdaki koda benzer:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
public string Rating { get; set; }
}
Filmi Derle>menü komutunu kullanarak veya CTRL-SHIFT-B tuşlarına basarak uygulamayı derleyin.
Sınıfı güncelleştirdiğinize Model göre, yeni Rating özelliği tarayıcı görünümünde görüntülemek için \Views\Movies\Index.cshtml ve \Views\Movies\Create.cshtml görünüm şablonlarını da güncelleştirmeniz gerekir.
\Views\Movies\Index.cshtml dosyasını açın ve Price sütununun hemen arkasına bir <th>Rating</th> sütun başlığı ekleyin. Ardından, değeri işlemek @item.Rating için şablonun sonuna yakın bir <td> sütun ekleyin. Güncelleştirilmiş Index.cshtml görünüm şablonu aşağıdaki gibidir:
@model IEnumerable<MvcMovie.Models.Movie>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Rating)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<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>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>
Ardından \Views\Movies\Create.cshtml dosyasını açın ve formun sonuna aşağıdaki işaretlemeyi ekleyin. Bu, yeni bir film oluşturulduğunda derecelendirme belirtebilmeniz için bir metin kutusu oluşturur.
<div class="editor-label">
@Html.LabelFor(model => model.Rating)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Rating)
@Html.ValidationMessageFor(model => model.Rating)
</div>
Şimdi uygulama kodunu yeni Rating özelliği destekleyecek şekilde güncelleştirdiniz.
Şimdi uygulamayı çalıştırın ve /Filmler URL'sine gidin. Ancak bunu yaptığınızda aşağıdaki hatalardan birini görürsünüz:


Uygulamadaki güncelleştirilmiş Movie model sınıfı artık mevcut veritabanının tablosunun Movie şemasından farklı olduğundan bu hatayı görüyorsunuz. (Veritabanı tablosunda sütun yok Rating .)
Hatayı çözmek için birkaç yaklaşım vardır:
- Entity Framework'ün veritabanını yeni model sınıfı şemasına göre otomatik olarak bırakmasını ve yeniden oluşturmasını sağlayın. Bu yaklaşım, bir test veritabanında etkin geliştirme yaparken çok kullanışlıdır; model ve veritabanı şemasını birlikte hızla geliştirmenizi sağlar. Ancak bunun dezavantajı, veritabanındaki mevcut verileri kaybetmenizdir; bu nedenle bu yaklaşımı bir üretim veritabanında kullanmak istemezsiniz! Test verileriyle veritabanını otomatik olarak görmek için başlatıcı kullanmak genellikle uygulama geliştirmenin üretken bir yoludur. Entity Framework veritabanı başlatıcıları hakkında daha fazla bilgi için Bkz. Tom Dykstra'nın ASP.NET MVC/Entity Framework öğreticisi.
- 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ı, verilerinizi saklamanızdır. Bu değişikliği el ile veya veritabanı değişiklik betiği oluşturarak yapabilirsiniz.
- Veritabanı şemasını güncelleştirmek için Code First Migrations'ı kullanın.
Bu öğreticide Code First Migrations'ı kullanacağız.
Seed yöntemini yeni sütun için bir değer sağlayacak şekilde güncelleştirin. Migrations\Configuration.cs dosyasını açın ve her Movie nesnesine bir Derecelendirme alanı ekleyin.
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Rating = "G",
Price = 7.99M
},
Çözümü derleyin ve Paket Yöneticisi Konsolu penceresini açın ve aşağıdaki komutu girin:
add-migration AddRatingMig
komutu, add-migration geçiş çerçevesine geçerli film modelini geçerli film veritabanı şemasıyla incelemesini ve veritabanını yeni modele geçirmek için gerekli kodu oluşturmasını söyler. AddRatingMig rastgeledir ve geçiş dosyasını adlandırmak için kullanılır. Geçiş adımı için anlamlı bir ad kullanmak yararlı olur.
Bu komut tamamlandığında, Visual Studio yeni DbMigration türetilmiş sınıfı tanımlayan sınıf dosyasını açar ve yönteminde Up yeni sütunu oluşturan kodu görebilirsiniz.
public partial class AddRatingMig : DbMigration
{
public override void Up()
{
AddColumn("dbo.Movies", "Rating", c => c.String());
}
public override void Down()
{
DropColumn("dbo.Movies", "Rating");
}
}
Çözümü derleyin ve ardından Paket Yöneticisi Konsolu penceresine "update-database" komutunu girin.
Aşağıdaki görüntüde, Paket Yöneticisi Konsolu penceresindeki çıkış gösterilmektedir (AddRatingMig tarih damgası önceden eklenerek farklı olacaktır.)

Uygulamayı yeniden çalıştırın ve /Movies URL'sine gidin. Yeni Derecelendirme alanını görebilirsiniz.

Yeni bir film eklemek için Yeni Oluştur bağlantısına tıklayın. Derecelendirme ekleyebileceğinizi unutmayın.

Oluştur’a tıklayın. Derecelendirme de dahil olmak üzere yeni film artık film listesinde gösterilir:

Alanı Düzenle, Ayrıntılar ve SearchIndex görünüm şablonlarına da eklemeniz Rating gerekir.
Paket Yöneticisi Konsolu penceresine "update-database" komutunu yeniden girebilirsiniz ve şema modelle eşleştiğinden hiçbir değişiklik yapılmaz.
Bu bölümde model nesnelerini nasıl değiştirebileceğinizi ve veritabanını değişikliklerle eşitlenmiş durumda tutabileceğinizi gördünüz. Ayrıca senaryoları deneyebilmek için yeni oluşturulan bir veritabanını örnek verilerle doldurmanın bir yolunu da öğrendiniz. Şimdi model sınıflarına nasıl daha zengin doğrulama mantığı ekleyebileceğinize ve bazı iş kurallarının uygulanmasını nasıl etkinleştirebileceğinize bakalım.