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.
MVC Müzik Deposu, web geliştirme için ASP.NET MVC ve Visual Studio'yu kullanmayı adım adım tanıtır ve açıklayan bir öğretici uygulamasıdır.
MVC Music Store, müzik albümlerini çevrimiçi olarak satan ve temel site yönetimi, kullanıcı oturum açma ve alışveriş sepeti işlevlerini uygulayan basit bir örnek mağaza uygulamasıdır.
Bu öğretici serisi, ASP.NET MVC Müzik Deposu örnek uygulamasını derlemek için atılan tüm adımların ayrıntılarını içerir. Bölüm 4, Modeller ve Veri Erişimi'ni kapsar.
Şu ana kadar Denetleyicilerimizden Görünüm şablonlarımıza "sahte veriler" geçiriyorduk. Artık gerçek bir veritabanı oluşturmaya hazırız. Bu öğreticide veritabanı altyapımız olarak SQL Server Compact Edition'ın (genellikle SQL CE olarak adlandırılır) nasıl kullanılacağını anlatacağız. SQL CE, herhangi bir yükleme veya yapılandırma gerektirmeyen, yerel geliştirme için gerçekten kullanışlı hale getiren ücretsiz, eklenmiş, dosya tabanlı bir veritabanıdır.
Entity Framework Code-First ile veritabanı erişimi
Veritabanını sorgulamak ve güncelleştirmek için ASP.NET MVC 3 projelerine dahil edilen Entity Framework (EF) desteğini kullanacağız. EF, geliştiricilerin veritabanında depolanan verileri nesne odaklı bir şekilde sorgulamasını ve güncelleştirmesini sağlayan esnek bir nesne ilişkisel eşleme (ORM) veri API'sidir.
Entity Framework sürüm 4, code-first adlı bir geliştirme paradigması destekler. Kod öncelikli, basit sınıflar ("düz eski" CLR nesnelerinden POCO olarak da bilinir) yazarak model nesnesi oluşturmanıza olanak tanır ve hatta sınıflarınızdan anında veritabanı oluşturabilirsiniz.
Model Sınıflarımızdaki Değişiklikler
Bu öğreticide Entity Framework'teki veritabanı oluşturma özelliğinden yararlanacağız. Ancak bunu yapmadan önce model sınıflarımızda daha sonra kullanacağımız bazı şeyleri eklemek için birkaç küçük değişiklik yapalım.
Sanatçı Modeli Sınıflarını Ekleme
Albümlerimiz Sanatçılar ile ilişkilendirileceği için bir Sanatçıyı tanımlamak için basit bir model sınıfı ekleyeceğiz. Aşağıda gösterilen kodu kullanarak Artist.cs adlı Models klasörüne yeni bir sınıf ekleyin.
namespace MvcMusicStore.Models
{
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
}
Model Sınıflarımızı Güncelleştirme
Albüm sınıfını aşağıda gösterildiği gibi güncelleştirin.
namespace MvcMusicStore.Models
{
public class Album
{
public int AlbumId { get; set; }
public int GenreId { get; set; }
public int ArtistId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public string AlbumArtUrl { get; set; }
public Genre Genre { get; set; }
public Artist Artist { get; set; }
}
}
Ardından, Genre sınıfında aşağıdaki güncelleştirmeleri yapın.
using System.Collections.Generic;
namespace MvcMusicStore.Models
{
public partial class Genre
{
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Album> Albums { get; set; }
}
}
App_Data klasörünü ekleme
SQL Server Express veritabanı dosyalarımızı barındırmak için projemize bir App_Data dizini ekleyeceğiz. App_Data, ASP.NET'da veritabanı erişimi için doğru güvenlik erişim izinlerine sahip olan özel bir dizindir. Proje menüsünden ASP.NET Klasör Ekle'yi seçin ve App_Data.
web.config dosyasında Bağlantı Dizesi Oluşturma
Entity Framework'ün veritabanımıza nasıl bağlanacağını bilmesi için web sitesinin yapılandırma dosyasına birkaç satır ekleyeceğiz. Projenin kökünde bulunan Web.config dosyasına çift tıklayın.
Bu dosyanın en altına kaydırın ve aşağıda gösterildiği gibi son satırın hemen üstüne bir <connectionStrings> bölümü ekleyin.
<connectionStrings>
<add name="MusicStoreEntities"
connectionString="Data Source=|DataDirectory|MvcMusicStore.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
</configuration>
Bağlam Sınıfı Ekleme
Models klasörüne sağ tıklayın ve MusicStoreEntities.cs adlı yeni bir sınıf ekleyin.
Bu sınıf Entity Framework veritabanı bağlamını temsil eder ve oluşturma, okuma, güncelleştirme ve silme işlemlerimizi bizim için işler. Bu sınıfın kodu aşağıda gösterilmiştir.
using System.Data.Entity;
namespace MvcMusicStore.Models
{
public class MusicStoreEntities : DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<Genre> Genres { get; set; }
}
}
İşte bu kadar - başka bir yapılandırma, özel arabirimler vb. yoktur. DbContext temel sınıfını genişleterek MusicStoreEntities sınıfımız veritabanı işlemlerimizi bizim için işleyebilir. Bu özelliği bağladığımıza göre veritabanımızdaki bazı ek bilgilerden yararlanmak için model sınıflarımıza birkaç özellik daha ekleyelim.
Mağaza kataloğu verilerimizi ekleme
Entity Framework'te yeni oluşturulan veritabanına "seed" verileri ekleyen bir özelliğin avantajlarından yararlanacağız. Bu, mağaza kataloğumuzu Tarzlar, Sanatçılar ve Albümler listesiyle önceden doldurur. Bu öğreticinin önceki bölümlerinde kullanılan site tasarım dosyalarımızı da içeren MvcMusicStore-Assets.zip indirme, Kod adlı bir klasörde bulunan bu tohum verilerini içeren bir sınıf dosyasına sahiptir.
Code / Models klasöründe SampleData.cs dosyasını bulun ve aşağıda gösterildiği gibi projemizdeki Models klasörüne bırakın.
Şimdi Entity Framework'e bu SampleData sınıfını bildirmek için bir kod satırı eklememiz gerekiyor. Projenin kökündeki Global.asax dosyasına çift tıklayarak açın ve Application_Start yönteminin en üstüne aşağıdaki satırı ekleyin.
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(
new MvcMusicStore.Models.SampleData());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Bu noktada, projemiz için Entity Framework'ün yapılandırılması için gereken çalışmayı tamamladık.
Veritabanını Sorgulama
Şimdi StoreController'ımızı güncelleştirerek "kukla verileri" kullanmak yerine tüm bilgilerini sorgulamak üzere veritabanımıza çağırmasını sağlayın. StoreController'da storeDB adlı MusicStoreEntities sınıfının bir örneğini barındıracak bir alan bildirerek başlayacağız:
public class StoreController : Controller
{
MusicStoreEntities storeDB = new MusicStoreEntities();
Veritabanını sorgulamak için Mağaza Dizini'ni güncelleştirme
MusicStoreEntities sınıfı Entity Framework tarafından korunur ve veritabanımızdaki her tablo için bir koleksiyon özelliği kullanıma sunar. Şimdi Veritabanımızdaki tüm Tarzları almak için StoreController'ın Dizin eylemini güncelleştirelim. Daha önce dize verilerini sabit kodlayarak bunu yapmıştık. Artık yalnızca Entity Framework bağlamı Generes koleksiyonunu kullanabiliriz:
public ActionResult Index()
{
var genres = storeDB.Genres.ToList();
return View(genres);
}
Daha önce döndürdiğimiz Aynı StoreIndexViewModel'i döndürmeye devam ettiğimizden Görünüm şablonumuzda herhangi bir değişiklik yapmanız gerekmez. Şimdi yalnızca veritabanımızdan canlı verileri döndüreceğiz.
Projeyi yeniden çalıştırıp "/Store" URL'sini ziyaret ettiğimizde şimdi veritabanımızda tüm Tarzların listesini göreceğiz:
Canlı verileri kullanmak için Mağaza Göz Atma ve Ayrıntılar'ı güncelleştirme
/Store/Browse?genre=[some-genre] eylem yöntemiyle, ada göre bir Tarz arıyoruz. Aynı Tarz adı için hiçbir zaman iki giriş olmaması gerektiğinden yalnızca bir sonuç bekliyoruz ve bu nedenle kullanabiliriz. LinQ'te aşağıdakine benzer uygun Genre nesnesini sorgulamak için Single() uzantısı (henüz bunu yazma):
var example = storeDB.Genres.Single(g => g.Name == "Disco");
Tek yöntemi, bir Lambda ifadesini parametre olarak alır ve bu da adı tanımladığımız değerle eşleşen tek bir Genre nesnesi istediğimizi belirtir. Yukarıdaki örnekte, Disko ile eşleşen bir Ad değerine sahip tek bir Genre nesnesi yüklüyoruz.
Genre nesnesi alındığında da yüklenmesini istediğimiz diğer ilgili varlıkları belirtmemizi sağlayan bir Entity Framework özelliğinden yararlanacağız. Bu özellik Sorgu Sonucu Şekillendirme olarak adlandırılır ve ihtiyacımız olan tüm bilgileri almak için veritabanına erişme sayısını azaltmamıza olanak tanır. Aldığımız Tarz albümlerini önceden getirmek istediğimiz için ilgili albümleri de istediğimizi belirtmek için sorgumuzu Genres.Include("Albums") öğesini içerecek şekilde güncelleştireceğiz. Bu daha verimlidir çünkü hem Tür hem de Albüm verilerimizi tek bir veritabanı isteğinde alır.
Açıklamalar aradan çıktığı için güncelleştirilmiş Gözat denetleyicisi eylemimiz şu şekilde görünür:
public ActionResult Browse(string genre)
{
// Retrieve Genre and its Associated Albums from database
var genreModel = storeDB.Genres.Include("Albums")
.Single(g => g.Name == genre);
return View(genreModel);
}
Artık Her Tarz'da bulunan albümleri görüntülemek için Mağaza Göz Atma Görünümü'nü güncelleştirebiliriz. Görünüm şablonunu açın (/Views/Store/Browse.cshtml içinde bulunur) ve aşağıda gösterildiği gibi madde işaretli albüm listesi ekleyin.
@model MvcMusicStore.Models.Genre
@{
ViewBag.Title = "Browse";
}
<h2>Browsing Genre: @Model.Name</h2>
<ul>
@foreach (var album in Model.Albums)
{
<li>
@album.Title
</li>
}
</ul>
Uygulamamızı çalıştırıp /Store/Browse?genre=Jazz'a göz atmak, sonuçlarımızın artık veritabanından çekildiğini ve seçili Türümüzdeki tüm albümlerin görüntülendiğini gösteriyor.
/Store/Details/[id] URL'mizde de aynı değişikliği yapacağız ve sahte verilerimizi, kimliği parametre değeriyle eşleşen bir Albüm yükleyen bir veritabanı sorgusuyla değiştireceğiz.
public ActionResult Details(int id)
{
var album = storeDB.Albums.Find(id);
return View(album);
}
Uygulamamızı çalıştırmak ve /Store/Details/1'e göz atmak, sonuçlarımızın artık veritabanından çekildiğini gösterir.
Mağaza Ayrıntıları sayfamız Albüm Kimliğine göre bir albüm görüntüleyecek şekilde ayarlandı. Şimdi Ayrıntılar görünümüne bağlantı vermek için Gözat görünümünü güncelleştirelim. Html.ActionLink'i, önceki bölümün sonunda Mağaza Dizini'nden Store Browse'a bağlamak için yaptığımız gibi kullanacağız. Gözat görünümünün tam kaynağı aşağıda görünür.
@model MvcMusicStore.Models.Genre
@{
ViewBag.Title = "Browse";
}
<h2>Browsing Genre: @Model.Name</h2>
<ul>
@foreach (var album in Model.Albums)
{
<li>
@Html.ActionLink(album.Title,
"Details", new { id = album.AlbumId })
</li>
}
</ul>
Artık Mağaza sayfamızdan kullanılabilir albümleri listeleyen bir Tarz sayfasına göz atabiliyoruz ve bir albüme tıklayarak bu albümün ayrıntılarını görüntüleyebiliriz.