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 öğreticide, Microsoft Visual Studio'nun ücretsiz sürümü olan Microsoft Visual Web Developer 2010 Express Service Pack 1'i kullanarak ASP.NET MVC Web uygulaması oluşturmanın temelleri öğretilecektir. Başlamadan önce, aşağıda listelenen önkoşulları yüklediğinizden emin olun. Aşağıdaki bağlantıya tıklayarak bunların tümünü yükleyebilirsiniz: Web Platformu Yükleyicisi. Alternatif olarak, aşağıdaki bağlantıları kullanarak önkoşulları tek tek yükleyebilirsiniz:
- Visual Studio Web Developer Express SP1 önkoşulları
- ASP.NET MVC 3 Araçları Güncelleştirmesi
- SQL Server Compact 4.0(çalışma zamanı + araçlar desteği)
Visual Web Developer 2010 yerine Visual Studio 2010 kullanıyorsanız, aşağıdaki bağlantıya tıklayarak önkoşulları yükleyin: Visual Studio 2010 önkoşulları.
C# kaynak koduna sahip bir Visual Web Developer projesi bu konuya eşlik edebilir. C# sürümünü indirin. Visual Basic'i tercih ediyorsanız, bu öğreticinin Visual Basic sürümüne geçin.
Bu bölümde, model sınıflarında bazı değişiklikler yapacak ve veritabanı şemasını model değişiklikleriyle eşleşecek şekilde nasıl güncelleştirebileceğinizi öğreneceksiniz.
Film Modeline Derecelendirme Özelliği Ekleme
Mevcut Movie sınıfa yeni Rating bir özellik ekleyerek başlayın. Movie.cs dosyasını açın ve özelliğini şu şekilde 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; }
}
Derleme Filmi Hatalarını Ayıkla>menü komutunu kullanarak uygulamayı yeniden derleyin.
Sınıfı güncelleştirdiğinize Model göre, yeni Rating özelliği desteklemek 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:
<table>
<tr>
<th></th>
<th>Title</th>
<th>Release Date</th>
<th>Genre</th>
<th>Price</th>
<th>Rating</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 Me", "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>
Model ve Veritabanı Şeması Farklarını Yönetme
Ş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 hatayı 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 .)
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. Eşitleme denetimi özelliği, az önce gördüğünüz hata iletisinin görüntülenmesine neden olan özelliktir.
Hatayı çözmek için iki 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, çünkü modeli 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!
- 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.
Bu öğreticide ilk yaklaşımı kullanacağız. Model her değiştiğinde Entity Framework Code First veritabanını otomatik olarak yeniden oluşturacaksınız.
Model Değişikliklerinde Veritabanını Otomatik Olarak Yeniden Oluşturma
Şimdi Code First uygulamasını, uygulamanın modelini her değiştirdiğinizde otomatik olarak bırakılıp yeniden oluşturabilecek şekilde güncelleştirelim.
Not
Uyarı Veritabanını otomatik olarak bırakma ve yeniden oluşturma yaklaşımını yalnızca geliştirme veya test veritabanı kullanırken etkinleştirmeniz ve hiçbir zaman gerçek veri içeren bir üretim veritabanında etkinleştirmeniz gerekir. Bunu bir üretim sunucusunda kullanmak veri kaybına neden olabilir.
Çözüm Gezgini Modeller klasörüne sağ tıklayın, Ekle'yi ve ardından Sınıf'ı seçin.

Sınıfı "MovieInitializer" olarak adlandırın. sınıfını MovieInitializer aşağıdaki kodu içerecek şekilde güncelleştirin:
using System;
using System.Collections.Generic;
using System.Data.Entity;
namespace MvcMovie.Models {
public class MovieInitializer : DropCreateDatabaseIfModelChanges<MovieDBContext> {
protected override void Seed(MovieDBContext context) {
var movies = new List<Movie> {
new Movie { Title = "When Harry Met Sally",
ReleaseDate=DateTime.Parse("1989-1-11"),
Genre="Romantic Comedy",
Rating="R",
Price=7.99M},
new Movie { Title = "Ghostbusters ",
ReleaseDate=DateTime.Parse("1984-3-13"),
Genre="Comedy",
Rating="R",
Price=8.99M},
new Movie { Title = "Ghostbusters 2",
ReleaseDate=DateTime.Parse("1986-2-23"),
Genre="Comedy",
Rating="R",
Price=9.99M},
new Movie { Title = "Rio Bravo",
ReleaseDate=DateTime.Parse("1959-4-15"),
Genre="Western",
Rating="R",
Price=3.99M},
};
movies.ForEach(d => context.Movies.Add(d));
}
}
}
sınıfı, MovieInitializer model sınıfları değişirse model tarafından kullanılan veritabanının bırakılması ve otomatik olarak yeniden oluşturulması gerektiğini belirtir. Kod, herhangi bir oluşturulduğunda (veya yeniden oluşturulduğunda) veritabanına otomatik olarak eklenecek bazı varsayılan verileri belirtmek için bir Seed yöntem içerir. Bu, her model değişikliği yaptığınızda veritabanını el ile doldurmanıza gerek kalmadan bazı örnek verilerle doldurmak için kullanışlı bir yol sağlar.
Sınıfı tanımladığınıza MovieInitializer göre, uygulama her çalıştığında model sınıflarının veritabanındaki şemadan farklı olup olmadığını denetlemesi için bu sınıfı bağlamanız gerekir. Bu durumda, başlatıcıyı çalıştırarak modeli eşleştirmek üzere veritabanını yeniden oluşturabilir ve sonra veritabanını örnek verilerle doldurabilirsiniz.
Projenin kökündeki MvcMovies Global.asax dosyasını açın:
Global.asax dosyası, projenin tüm uygulamasını tanımlayan sınıfını içerir ve uygulama ilk kez başlatıldığında çalışan bir Application_Start olay işleyicisi içerir.
Dosyanın en üstüne iki using deyimi ekleyelim. birincisi Entity Framework ad alanına, ikincisi ise sınıfımızın MovieInitializer yaşadığı ad alanına başvurur:
using System.Data.Entity; // Database.SetInitialize
using MvcMovie.Models; // MovieInitializer
Ardından aşağıda gösterildiği gibi yöntemini bulun Application_Start ve yönteminin başına bir çağrı Database.SetInitializer ekleyin:
protected void Application_Start()
{
Database.SetInitializer<MovieDBContext>(new MovieInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Yeni Database.SetInitializer eklediğiniz deyim, şema ve veritabanı eşleşmiyorsa örnek tarafından kullanılan veritabanının MovieDBContext otomatik olarak silinmesi ve yeniden oluşturulması gerektiğini gösterir. Gördüğünüz gibi, veritabanını sınıfında MovieInitializer belirtilen örnek verilerle de doldurur.
Global.asax dosyasını kapatın.
Uygulamayı yeniden çalıştırın ve /Movies URL'sine gidin. Uygulama başlatıldığında, model yapısının artık veritabanı şemasıyla eşleşmediğini algılar. Veritabanını yeni model yapısıyla eşleşecek şekilde otomatik olarak yeniden oluşturur ve veritabanını örnek filmlerle doldurur:

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:
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.


