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
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ı.
VB.NET kaynak koduna sahip bir Visual Web Geliştirici projesi bu konuya eşlik edebilir. VB.NET sürümünü indirin. C# dilini tercih ediyorsanız bu öğreticinin C# 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 Property Rating() As String
Sınıfın tamamı Movie artık aşağıdaki koda benzer:
Public Class Movie
Public Property ID() As Integer
Public Property Title() As String
Public Property ReleaseDate() As Date
Public Property Genre() As String
Public Property Price() As Decimal
Public Property Rating() As String
End Class
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.vbhtml ve \Views\Movies\Create.vbhtml görünüm şablonlarını da güncelleştirmeniz gerekir.
\Views\Movies\Index.vbhtml 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.vbhtml görünüm şablonu aşağıdaki gibidir:
<table>
<tr>
<th> Title </th>
<th> ReleaseDate </th>
<th> Genre </th>
<th> Price </th>
<th>Rating</th>
<th></th>
</tr>
@For Each item In Model
Dim currentItem = item
@<tr>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Title)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.ReleaseDate)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Genre)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Price)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Rating)
</td>
<td>
@Html.ActionLink("Edit", "Edit", New With {.id = currentItem.ID}) |
@Html.ActionLink("Details", "Details", New With {.id = currentItem.ID}) |
@Html.ActionLink("Delete", "Delete", New With {.id = currentItem.ID})
</td>
</tr>
Next
</table>
Ardından \ Views\Movies\Create.vbhtml 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(Function(model) model.Rating)
</div>
<div class="editor-field">
@Html.EditorFor(Function(model) model.Rating)
@Html.ValidationMessageFor(Function(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;
Imports System
Imports System.Collections.Generic
Imports System.Data.Entity
Namespace MvcMovie.Models
Public Class MovieInitializer
Inherits DropCreateDatabaseIfModelChanges(Of MovieDBContext)
Protected Overrides Sub Seed(ByVal context As MovieDBContext)
Dim movies = New List(Of Movie) From {
New Movie With {.Title = "When Harry Met Sally", .ReleaseDate = Date.Parse("1989-1-11"), .Genre = "Romantic Comedy", .Rating = "R", .Price = 7.99D},
New Movie With {.Title = "Ghostbusters ", .ReleaseDate = Date.Parse("1984-3-13"), .Genre = "Comedy", .Rating = "R", .Price = 8.99D},
New Movie With {.Title = "Ghostbusters 2", .ReleaseDate = Date.Parse("1986-2-23"), .Genre = "Comedy", .Rating = "R", .Price = 9.99D},
New Movie With {.Title = "Rio Bravo", .ReleaseDate = Date.Parse("1959-4-15"), .Genre = "Western", .Rating = "R", .Price = 3.99D}}
movies.ForEach(Function(d) context.Movies.Add(d))
End Sub
End Class
End Namespace
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.
Application_Start aşağıda gösterildiği gibi yöntemini bulun ve yönteminin başına bir çağrı Database.SetInitializer ekleyin:
Sub Application_Start()
System.Data.Entity.Database.SetInitializer(Of MovieDBContext)(New MvcMovie.Models.MovieInitializer())
AreaRegistration.RegisterAllAreas()
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
End Sub
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.
