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.
Not
Yeni geliştirme için ASP.NET MVC denetleyicileri ve görünümleri üzerinden Core Razor Pages ASP.NET öneririz. Razor Pages kullanan buna benzer bir öğretici serisi için bkz . Öğretici: ASP.NET Core'da Razor Sayfalarını kullanmaya başlama. Yeni öğretici:
- Takip etmek daha kolaydır.
- Daha fazla EF Core en iyi deneyimi sağlar.
- Daha verimli sorgular kullanır.
- En son API ile daha günceldir.
- Daha fazla özelliği kapsar.
- Yeni uygulama geliştirme için tercih edilen yaklaşımdır.
Bu öğretici dizisinde, veri erişimi için Entity Framework 6 kullanan bir ASP.NET MVC 5 uygulaması oluşturmayı öğreneceksiniz. Bu öğreticide Code First iş akışı kullanılır. Code First, Database First ve Model First arasında seçim yapma hakkında bilgi için bkz . Model oluşturma.
Bu öğretici serisinde Contoso University örnek uygulamasının nasıl derlenenleri açıklanmaktadır. Örnek uygulama basit bir üniversite web sitesidir. Bununla öğrenci, kurs ve eğitmen bilgilerini görüntüleyebilir ve güncelleştirebilirsiniz. Oluşturduğunuz iki ekran şunlardır:
Bu öğreticide şunları yaptınız:
- MVC web uygulaması oluşturma
- Site stilini ayarlama
- Entity Framework 6'yi yükleme
- Veri modelini oluşturma
- Veritabanı bağlamı oluşturma
- Veritabanı'nın test verileriyle başlatılması
- EF 6'yı LocalDB kullanacak şekilde ayarlama
- Denetleyici ve görünüm oluşturma
- Veritabanını görüntüleme
Önkoşullar
MVC web uygulaması oluşturma
Visual Studio'yu açın ve ASP.NET Web Uygulaması (.NET Framework) şablonunu kullanarak bir C# web projesi oluşturun. Projeyi ContosoUniversity olarak adlandırın ve Tamam'ı seçin.
Yeni ASP.NET Web Uygulaması - ContosoUniversity bölümünde MVC'yi seçin.
Not
Varsayılan olarak, Kimlik Doğrulaması seçeneği Kimlik Doğrulaması Yok olarak ayarlanır. Bu öğreticide, web uygulaması kullanıcıların oturum açmasını gerektirmez. Ayrıca, kimlerin oturum açtığına bağlı olarak erişimi kısıtlamaz.
Projeyi oluşturmak için Tamam'ı seçin.
Site stilini ayarlama
Birkaç basit değişiklik site menüsünü, düzenini ve giriş sayfasını ayarlar.
Views\Shared\_Layout.cshtml dosyasını açın ve aşağıdaki değişiklikleri yapın:
- "ASP.NET Uygulamam" ve "Uygulama adı" örneklerinin her birini "Contoso Üniversitesi" olarak değiştirin.
- Öğrenciler, Kurslar, Eğitmenler ve Bölümler için menü girdileri ekleyin ve Kişi girdisini silin.
Değişiklikler aşağıdaki kod parçacığında vurgulanır:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - Contoso University</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> @Html.ActionLink("Contoso University", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) <div class="nav-collapse collapse"> <ul class="nav"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Students", "Index", "Student")</li> <li>@Html.ActionLink("Courses", "Index", "Course")</li> <li>@Html.ActionLink("Instructors", "Index", "Instructor")</li> <li>@Html.ActionLink("Departments", "Index", "Department")</li> </ul> </div> </div> </div> </div> <div class="container"> @RenderBody() <hr /> <footer> <p>© @DateTime.Now.Year - Contoso University</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
Views\Home\Index.cshtml içinde, ASP.NET ve MVC hakkındaki metni bu uygulamayla ilgili metinle değiştirmek için dosyanın içeriğini aşağıdaki kodla değiştirin:
@{ ViewBag.Title = "Home Page"; } <div class="jumbotron"> <h1>Contoso University</h1> </div> <div class="row"> <div class="col-md-4"> <h2>Welcome to Contoso University</h2> <p>Contoso University is a sample application that demonstrates how to use Entity Framework 6 in an ASP.NET MVC 5 web application.</p> </div> <div class="col-md-4"> <h2>Build it from scratch</h2> <p>You can build the application by following the steps in the tutorial series on the ASP.NET site.</p> <p><a class="btn btn-default" href="http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/">See the tutorial »</a></p> </div> <div class="col-md-4"> <h2>Download it</h2> <p>You can download the completed project.</p> <p><a class="btn btn-default" href="https://webpifeed.blob.core.windows.net/webpifeed/Partners/ASP.NET%20MVC%20Application%20Using%20Entity%20Framework%20Code%20First.zip">Download »</a></p> </div> </div>
Web sitesini çalıştırmak için Ctrl+F5 tuşlarına basın. Ana menünün olduğu giriş sayfasını görürsünüz.
Entity Framework 6'yi yükleme
Araçlar menüsünde NuGet Paket Yöneticisi'ı ve ardından Konsol'u Paket Yöneticisi seçin.
Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu girin:
Install-Package EntityFramework
Bu adım, bu öğreticide el ile yapmanız gereken birkaç adımdan biridir, ancak bu işlem ASP.NET MVC iskelesi özelliği tarafından otomatik olarak yapılmış olabilir. Entity Framework (EF) kullanmak için gereken adımları görebilmek için bunları el ile yapıyorsunuz. MVC denetleyicisini ve görünümlerini oluşturmak için iskeleyi daha sonra kullanacaksınız. Bunun alternatifi, yapı iskelesinin EF NuGet paketini otomatik olarak yüklemesine, veritabanı bağlam sınıfını oluşturmasına ve bağlantı dizesi oluşturmasına izin vermektir. Bu şekilde yapmaya hazır olduğunuzda, tek yapmanız gereken bu adımları atlamak ve varlık sınıflarınızı oluşturduktan sonra MVC denetleyicinizin iskelesini oluşturmaktır.
Veri modelini oluşturma
Daha sonra Contoso Üniversitesi uygulaması için varlık sınıfları oluşturacaksınız. Aşağıdaki üç varlıkla başlayacaksınız:
Kurs-Kayıt-Öğrenci<><>
Varlıklar | İlişki |
---|---|
Kurs-Kayıt | Bir-çok |
Öğrenciden Kayda | Bir-çok |
varlıklar arasında Student
Enrollment
bire çok ilişkisi ve varlıklar arasında Course
Enrollment
bire çok ilişkisi vardır. Başka bir deyişle, bir öğrenci herhangi bir sayıda kursa kaydedilebilir ve bir kursta kayıtlı herhangi bir sayıda öğrenci olabilir.
Aşağıdaki bölümlerde, bu varlıkların her biri için bir sınıf oluşturacaksınız.
Not
Bu varlık sınıflarının tümünü oluşturmayı tamamlamadan önce projeyi derlemeye çalışırsanız, derleyici hataları alırsınız.
Student varlığı
Models klasöründe, Çözüm Gezgini klasörüne sağ tıklayıp Sınıf Ekle'yi>seçerek Student.cs adlı bir sınıf dosyası oluşturun. Şablon kodunu aşağıdaki kodla değiştirin:
using System; using System.Collections.Generic; namespace ContosoUniversity.Models { public class Student { public int ID { get; set; } public string LastName { get; set; } public string FirstMidName { get; set; } public DateTime EnrollmentDate { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } } }
özelliği, ID
veritabanı tablosunun bu sınıfa karşılık gelen birincil anahtar sütunu olur. Varsayılan olarak, Entity Framework veya classname ID
adlı ID
bir özelliği birincil anahtar olarak yorumlar.
Enrollments
özelliği bir gezinti özelliğidir. Gezinti özellikleri, bu varlıkla ilgili diğer varlıkları barındırır. Bu durumda, bir varlığın Enrollments
özelliği bu varlıkla ilgili Student
tüm Enrollment
varlıkları barındırır.Student
Başka bir deyişle, veritabanındaki belirli Student
bir satırda ilişkili Enrollment
iki satır varsa (yabancı anahtar sütununda o öğrencinin birincil anahtar değerini içeren satırlar StudentID
), bu varlığın Student
Enrollments
gezinti özelliği bu iki Enrollment
varlığı içerir.
Gezinti özellikleri genellikle olarak virtual
tanımlanır, böylece gecikmeli yükleme gibi belirli Entity Framework işlevselliğinden yararlanabilirler. (Gecikmeli yükleme daha sonraBu serinin devamında İlgili Verileri Okuma öğreticisi.)
Bir gezinti özelliği birden çok varlığı barındırabiliyorsa (çoka çok veya bire çok ilişkilerde olduğu gibi), türü gibi girdilerin eklenebileceği, silinebileceği ve güncelleştirilebileceği ICollection
bir liste olmalıdır.
Kayıt varlığı
Modeller klasöründe Enrollment.cs oluşturun ve mevcut kodu aşağıdaki kodla değiştirin:
namespace ContosoUniversity.Models { public enum Grade { A, B, C, D, F } public class Enrollment { public int EnrollmentID { get; set; } public int CourseID { get; set; } public int StudentID { get; set; } public Grade? Grade { get; set; } public virtual Course Course { get; set; } public virtual Student Student { get; set; } } }
EnrollmentID
özelliği birincil anahtar olacaktır; bu varlık, varlıkta gördüğünüz gibi kendi başına değil ID
sınıf adı ID
desenini Student
kullanır. Normalde tek bir desen seçer ve bunu veri modeliniz boyunca kullanabilirsiniz. Burada çeşitleme, her iki deseni de kullanabileceğinizi gösterir. Sonraki bir öğreticide, kullanmadan classname
kullanmanın ID
veri modelinde devralmayı uygulamayı nasıl kolaylaştırdiğini göreceksiniz.
Grade
özelliği bir sabit listesidir. Tür bildiriminden Grade
sonraki soru işareti özelliğin Grade
null atanabilir olduğunu gösterir. Null olan bir not sıfırdan farklıdır; null değeri, notların bilinmediği veya henüz atanmadığı anlamına gelir.
StudentID
özelliği bir yabancı anahtardır ve buna karşılık gelen gezinti özelliği şeklindedirStudent
. Bir Enrollment
varlık bir Student
varlıkla ilişkilendirildiğinden özellik yalnızca tek Student
bir varlığı barındırabilir (daha önce gördüğünüz gezinti özelliğinin Student.Enrollments
aksine, birden çok Enrollment
varlığı barındırabilir).
CourseID
özelliği bir yabancı anahtardır ve buna karşılık gelen gezinti özelliği şeklindedirCourse
. Bir Enrollment
varlık bir Course
varlıkla ilişkilendirilir.
Entity Framework, bir özelliğin adı <gezinti özelliği adı birincil anahtar özellik adıysa><> (örneğin, StudentID
varlığın Student
birincil anahtarı olduğundan gezinti özelliği Student
için) yabancı anahtar özelliği ID
olarak yorumlar. Yabancı anahtar özellikleri aynı basit <birincil anahtar özellik adıyla> da adlandırılabilir (örneğin, CourseID
varlığın Course
birincil anahtarı olduğu CourseID
için).
Kurs varlığı
Modeller klasöründe, şablon kodunu aşağıdaki kodla değiştirerek Course.cs oluşturun:
using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; namespace ContosoUniversity.Models { public class Course { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int CourseID { get; set; } public string Title { get; set; } public int Credits { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } } }
Enrollments
özelliği bir gezinti özelliğidir. Bir Course
varlık, herhangi bir sayıda Enrollment
varlıkla ilişkilendirilebilir.
Bu serinin DatabaseGeneratedAttribute sonraki öğreticilerinde özniteliği hakkında daha fazla bilgi vereceğiz. Temel olarak, bu öznitelik veritabanının oluşturması yerine kursun birincil anahtarını girmenizi sağlar.
Veritabanı bağlamı oluşturma
Belirli bir veri modeli için Entity Framework işlevselliğini koordine eden ana sınıf, veritabanı bağlam sınıfıdır. Bu sınıfı System.Data.Entity.DbContext sınıfından türeterek oluşturursunuz. Kodunuzda, veri modeline hangi varlıkların dahil olduğunu belirtirsiniz. Ayrıca belirli Entity Framework davranışını özelleştirebilirsiniz. Bu projede sınıfı olarak adlandırılır SchoolContext
.
ContosoUniversity projesinde klasör oluşturmak için, Çözüm Gezgini'da projeye sağ tıklayın ve Ekle'ye tıklayın ve ardından Yeni Klasör'e tıklayın. Yeni klasöre DAL adını verin (Veri Erişim Katmanı için). Bu klasörde, SchoolContext.cs adlı yeni bir sınıf dosyası oluşturun ve şablon kodunu aşağıdaki kodla değiştirin:
using ContosoUniversity.Models; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; namespace ContosoUniversity.DAL { public class SchoolContext : DbContext { public SchoolContext() : base("SchoolContext") { } public DbSet<Student> Students { get; set; } public DbSet<Enrollment> Enrollments { get; set; } public DbSet<Course> Courses { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } } }
Varlık kümelerini belirtme
Bu kod, her varlık kümesi için bir DbSet özelliği oluşturur. Entity Framework terminolojisinde varlık kümesi genellikle bir veritabanı tablosuna, varlık ise tablodaki bir satıra karşılık gelir.
Not
ve DbSet<Course>
deyimlerini atlayabilirsiniz DbSet<Enrollment>
ve aynı şekilde çalışır. Varlık varlığa, varlık da varlığa Enrollment
başvuracağından Course
Student
Enrollment
, Entity Framework bunları örtük olarak içerebilir.
bağlantı dizesi belirtin
oluşturucuya bağlantı dizesi adı (daha sonra Web.config dosyasına ekleyeceğiniz ad) geçirilir.
public SchoolContext() : base("SchoolContext")
{
}
Web.config dosyasında depolanan adı yerine bağlantı dizesi de geçirebilirsiniz. Kullanılacak veritabanını belirtme seçenekleri hakkında daha fazla bilgi için bkz . Bağlantı dizeleri ve modelleri.
Açıkça bir bağlantı dizesi veya adı belirtmezseniz, Entity Framework bağlantı dizesi adının sınıf adıyla aynı olduğunu varsayar. Bu örnekteki varsayılan bağlantı dizesi adı, açıkça belirttiğiniz adla aynı olacaktırSchoolContext
.
Tekil tablo adlarını belirtme
modelBuilder.Conventions.Remove
OnModelCreating yöntemindeki deyimi, tablo adlarının çoğullaştırılmasını engeller. Bunu yapmadıysanız veritabanında oluşturulan tablolar , Courses
ve Enrollments
olarak adlandırılırStudents
. Bunun yerine, tablo adları , Course
ve Enrollment
olurStudent
. Geliştiriciler tablo adlarının çoğullaştırılıp çoğullaştırılmaması konusunda aynı fikirde değildir. Bu öğreticide tekil form kullanılır, ancak önemli olan nokta, bu kod satırını ekleyerek veya atlayarak hangi formu tercih ettiğinizi seçebilmenizdir.
Veritabanı'nın test verileriyle başlatılması
Entity Framework, uygulama çalıştırıldığında sizin için otomatik olarak bir veritabanı oluşturabilir (veya bırakıp yeniden oluşturabilir). Bunun, uygulamanız her çalıştığında veya yalnızca model mevcut veritabanıyla eşitlenmemiş olduğunda yapılması gerektiğini belirtebilirsiniz. Veritabanını test verileriyle doldurmak için Entity Framework'ün veritabanını oluşturduktan sonra otomatik olarak çağıran bir Seed
yöntem de yazabilirsiniz.
Varsayılan davranış, yalnızca mevcut olmayan bir veritabanı oluşturmaktır (ve model değişmişse ve veritabanı zaten mevcutsa bir özel durum oluşturur). Bu bölümde, model her değiştiğinde veritabanının bırakılması ve yeniden oluşturulması gerektiğini belirteceksiniz. Veritabanını bırakmak tüm verilerinizin kaybolmasına neden olur. Veritabanı yeniden oluşturulduğunda yöntemi çalıştırılacağı ve test verilerinizi yeniden oluşturacağı için Seed
bu genellikle geliştirme sırasında sorun olmaz. Ancak üretimde genellikle veritabanı şemasını her değiştirmeniz gerektiğinde tüm verilerinizi kaybetmek istemezsiniz. Daha sonra, veritabanını bırakmak ve yeniden oluşturmak yerine veritabanı şemasını değiştirmek için Code First Migrations kullanarak model değişikliklerini nasıl işleneceğini göreceksiniz.
DAL klasöründe, SchoolInitializer.cs adlı yeni bir sınıf dosyası oluşturun ve şablon kodunu aşağıdaki kodla değiştirin; bu da gerektiğinde veritabanının oluşturulmasına neden olur ve test verilerini yeni veritabanına yükler.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using ContosoUniversity.Models; namespace ContosoUniversity.DAL { public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext> { protected override void Seed(SchoolContext context) { var students = new List<Student> { new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01")}, new Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")}, new Student{FirstMidName="Arturo",LastName="Anand",EnrollmentDate=DateTime.Parse("2003-09-01")}, new Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")}, new Student{FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")}, new Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse("2001-09-01")}, new Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")}, new Student{FirstMidName="Nino",LastName="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")} }; students.ForEach(s => context.Students.Add(s)); context.SaveChanges(); var courses = new List<Course> { new Course{CourseID=1050,Title="Chemistry",Credits=3,}, new Course{CourseID=4022,Title="Microeconomics",Credits=3,}, new Course{CourseID=4041,Title="Macroeconomics",Credits=3,}, new Course{CourseID=1045,Title="Calculus",Credits=4,}, new Course{CourseID=3141,Title="Trigonometry",Credits=4,}, new Course{CourseID=2021,Title="Composition",Credits=3,}, new Course{CourseID=2042,Title="Literature",Credits=4,} }; courses.ForEach(s => context.Courses.Add(s)); context.SaveChanges(); var enrollments = new List<Enrollment> { new Enrollment{StudentID=1,CourseID=1050,Grade=Grade.A}, new Enrollment{StudentID=1,CourseID=4022,Grade=Grade.C}, new Enrollment{StudentID=1,CourseID=4041,Grade=Grade.B}, new Enrollment{StudentID=2,CourseID=1045,Grade=Grade.B}, new Enrollment{StudentID=2,CourseID=3141,Grade=Grade.F}, new Enrollment{StudentID=2,CourseID=2021,Grade=Grade.F}, new Enrollment{StudentID=3,CourseID=1050}, new Enrollment{StudentID=4,CourseID=1050,}, new Enrollment{StudentID=4,CourseID=4022,Grade=Grade.F}, new Enrollment{StudentID=5,CourseID=4041,Grade=Grade.C}, new Enrollment{StudentID=6,CourseID=1045}, new Enrollment{StudentID=7,CourseID=3141,Grade=Grade.A}, }; enrollments.ForEach(s => context.Enrollments.Add(s)); context.SaveChanges(); } } }
Seed
yöntemi, veritabanı bağlam nesnesini giriş parametresi olarak alır ve yöntemindeki kod veritabanına yeni varlıklar eklemek için bu nesneyi kullanır. Kod, her varlık türü için yeni varlıklardan oluşan bir koleksiyon oluşturur, bunları uygunDbSet
özelliğe ekler ve sonra değişiklikleri veritabanına kaydeder. Burada olduğu gibi her varlık grubundanSaveChanges
sonra yöntemini çağırmak gerekli değildir, ancak bunu yapmak, kod veritabanına yazarken bir özel durum oluşursa sorunun kaynağını bulmanıza yardımcı olur.Entity Framework'e başlatıcı sınıfınızı kullanmasını bildirmek için
entityFramework
, aşağıdaki örnekte gösterildiği gibi uygulama Web.config dosyasındaki öğesine (kök proje klasöründeki öğe) bir öğe ekleyin:<entityFramework> <contexts> <context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity"> <databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" /> </context> </contexts> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>
tam
context type
bağlam sınıfı adını ve içinde olduğu derlemeyi belirtir vedatabaseinitializer type
başlatıcı sınıfının ve içinde olduğu derlemenin tam adını belirtir. (EF'nin başlatıcıyı kullanmasını istemediğinizde, öğesindecontext
bir öznitelik ayarlayabilirsiniz:disableDatabaseInitialization="true"
.) Daha fazla bilgi için bkz . Yapılandırma Dosyası Ayarları.Web.config dosyasında başlatıcıyı ayarlamanın bir alternatifi, Global.asax.cs dosyasında yöntemine
Application_Start
birDatabase.SetInitializer
deyim ekleyerek bunu kodda yapmaktır. Daha fazla bilgi için bkz . Önce Entity Framework Code'da Veritabanı Başlatıcılarını Anlama.
Uygulama artık belirli bir uygulama çalıştırmasında veritabanına ilk kez eriştiğinizde Entity Framework veritabanını modelle (sizin ve varlık sınıflarınız SchoolContext
) karşılaştıracak şekilde ayarlanmıştır. Bir fark varsa, uygulama veritabanını bırakır ve yeniden oluşturur.
Not
Bir uygulamayı üretim web sunucusuna dağıttığınızda, veritabanını kaldırıp yeniden oluşturan kodu kaldırmanız veya devre dışı bırakmanız gerekir. Bunu bu serinin sonraki öğreticilerinde yapacaksınız.
EF 6'yı LocalDB kullanacak şekilde ayarlama
LocalDB , SQL Server Express veritabanı altyapısının basit bir sürümüdür. Kolayca yüklenip yapılandırılabilir, isteğe bağlı olarak başlatılır ve kullanıcı modunda çalışır. LocalDB, veritabanlarıyla .mdf dosyaları olarak çalışmanızı sağlayan özel bir SQL Server Express yürütme modunda çalışır. Veritabanını projeyle birlikte kopyalayabilmek istiyorsanız LocalDB veritabanı dosyalarını web projesinin App_Data klasörüne yerleştirebilirsiniz. SQL Server Express'teki kullanıcı örneği özelliği, .mdf dosyalarla çalışmanızı da sağlar, ancak kullanıcı örneği özelliği kullanım dışıdır; bu nedenle, .mdf dosyalarıyla çalışmak için LocalDB önerilir. LocalDB, Visual Studio ile varsayılan olarak yüklenir.
SQL Server Express genellikle üretim web uygulamaları için kullanılmaz. LocalDB özellikle bir web uygulamasıyla üretim kullanımı için önerilmez çünkü IIS ile çalışacak şekilde tasarlanmamıştır.
Bu öğreticide LocalDB ile çalışacaksınız. Aşağıdaki örnekte gösterildiği gibi application Web.config dosyasını açın ve öğesinin
appSettings
önüne birconnectionStrings
öğe ekleyin. (Güncelleştirme yaptığınızdan emin olunKök proje klasöründeki Web.config dosyası. Görünümler alt klasöründe güncelleştirmeniz gerekmeyen bir Web.config dosyası da vardır.)<connectionStrings> <add name="SchoolContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=ContosoUniversity1;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/> </connectionStrings> <appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
Eklediğiniz bağlantı dizesi, Entity Framework'ün ContosoUniversity1.mdf adlı bir LocalDB veritabanı kullanacağını belirtir. (Veritabanı henüz mevcut değil, ancak EF bunu oluşturacak.) veritabanını App_Data klasörünüzde oluşturmak istiyorsanız, bağlantı dizesi ekleyebilirsinizAttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf
. bağlantı dizesi hakkında daha fazla bilgi için bkz. ASP.NET Web Uygulamaları için SQL Server Bağlantı Dizeleri.
Web.config dosyasında bir bağlantı dizesi ihtiyacınız yoktur. bağlantı dizesi sağlamazsanız, Entity Framework bağlam sınıfınızı temel alan varsayılan bir bağlantı dizesi kullanır. Daha fazla bilgi için bkz . Yeni Veritabanına İlk Kod.
Denetleyici ve görünüm oluşturma
Şimdi verileri görüntülemek için bir web sayfası oluşturacaksınız. Verileri isteme işlemi otomatik olarak veritabanının oluşturulmasını tetikler. Yeni bir denetleyici oluşturarak başlayacaksınız. Ancak bunu gerçekleştirmeden önce, modeli ve bağlam sınıflarını MVC denetleyicisi iskelesi için kullanılabilir hale getirmek için projeyi derleyin.
Çözüm Gezgini'da Denetleyiciler klasörüne sağ tıklayın, Ekle'yi seçin ve ardından Yeni İskeleli Öğe'ye tıklayın.
yapı iskelesi ekle iletişim kutusunda, Entity Framework kullanarak görünümlere sahip MVC 5 Denetleyicisi'ni seçin ve ardından Ekle'yi seçin.
Denetleyici Ekle iletişim kutusunda aşağıdaki seçimleri yapın ve ekle'yi seçin:
Model sınıfı: Öğrenci (ContosoUniversity.Models). (Açılan listede bu seçeneği görmüyorsanız projeyi derleyin ve yeniden deneyin.)
Veri bağlamı sınıfı: SchoolContext (ContosoUniversity.DAL).
Denetleyici adı: StudentController (StudentsController değil).
Diğer alanlar için varsayılan değerleri bırakın.
Ekle'ye tıkladığınızda, iskele bir StudentController.cs dosyası ve denetleyiciyle çalışan bir görünüm kümesi (.cshtml dosyaları) oluşturur. İleride Entity Framework kullanan projeler oluştururken, iskelenin bazı ek işlevlerinden de yararlanabilirsiniz: ilk model sınıfınızı oluşturun, bir bağlantı dizesi oluşturmayın ve ardından Denetleyici Ekle kutusunda Veri bağlamı sınıfının yanındaki düğmeyi seçerek + Yeni veri bağlamı belirtin. yapı iskelesi sınıfınızı
DbContext
ve bağlantı dizesi yanı sıra denetleyiciyi ve görünümleri oluşturur.
Visual Studio Controllers\StudentController.cs dosyasını açar. Veritabanı bağlam nesnesinin örneğini oluşturan bir sınıf değişkeni oluşturulduğunu görürsünüz:
private SchoolContext db = new SchoolContext();
Eylem yöntemi,
Index
veritabanı bağlam örneğinin özelliğini okuyarakStudents
Öğrenciler varlık kümesinden öğrencilerin listesini alır:public ViewResult Index() { return View(db.Students.ToList()); }
Student\Index.cshtml görünümü bu listeyi bir tabloda görüntüler:
<table> <tr> <th> @Html.DisplayNameFor(model => model.LastName) </th> <th> @Html.DisplayNameFor(model => model.FirstMidName) </th> <th> @Html.DisplayNameFor(model => model.EnrollmentDate) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.LastName) </td> <td> @Html.DisplayFor(modelItem => item.FirstMidName) </td> <td> @Html.DisplayFor(modelItem => item.EnrollmentDate) </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> }
Projeyi çalıştırmak için Ctrl+F5 tuşlarına basın. ("Gölge Kopya oluşturulamıyor" hatası alırsanız tarayıcıyı kapatın ve yeniden deneyin.)
Yöntemin eklendiği test verilerini görmek için Öğrenciler sekmesine
Seed
tıklayın. Tarayıcı pencerenizin ne kadar dar olduğuna bağlı olarak, üst adres çubuğunda Öğrenci sekmesi bağlantısını görürsünüz veya bağlantıyı görmek için sağ üst köşeye tıklamanız gerekir.
Veritabanını görüntüleme
Öğrenciler sayfasını çalıştırdığınızda ve uygulama veritabanına erişmeye çalıştığında, EF veritabanı olmadığını keşfetti ve bir veritabanı oluşturdu. EF daha sonra veritabanını verilerle doldurmak için seed yöntemini çalıştırdı.
Veritabanını Visual Studio'da görüntülemek için Sunucu Gezgini veya SQL Server Nesne Gezgini (SSOX) kullanabilirsiniz. Bu öğreticide Sunucu Gezgini'ni kullanacaksınız.
Tarayıcıyı kapatın.
Sunucu Gezgini'nde Veri Bağlantıları'nı genişletin (önce yenile düğmesini seçmeniz gerekebilir), Okul Bağlamı 'nı (ContosoUniversity) genişletin ve sonra yeni veritabanınızdaki tabloları görmek için Tablolar'ı genişletin.
Oluşturulan sütunları ve tabloya eklenen satırları görmek için Öğrenci tablosuna sağ tıklayın ve Tablo Verilerini Göster'e tıklayın.
Sunucu Gezgini bağlantısını kapatın.
ContosoUniversity1.mdf ve .ldf veritabanı dosyaları %USERPROFILE% klasöründedir.
Başlatıcıyı kullandığınızdan DropCreateDatabaseIfModelChanges
, artık sınıfında bir değişiklik Student
yapabilir, uygulamayı yeniden çalıştırabilir ve veritabanı değişikliğinizle eşleşecek şekilde otomatik olarak yeniden oluşturulur. Örneğin, sınıfa Student
bir EmailAddress
özellik ekler, Öğrenciler sayfasını yeniden çalıştırır ve sonra tabloya yeniden bakarsanız yeni EmailAddress
bir sütun görürsünüz.
Kurallar
Entity Framework'ün sizin için eksiksiz bir veritabanı oluşturabilmesi için yazmanız gereken kod miktarı, Entity Framework'ün yaptığı kurallar veya varsayımlar nedeniyle çok azdır. Bunlardan bazıları önceden not edilmiştir veya sizin haberiniz olmadan kullanılmıştır:
- Varlık sınıfı adlarının çoğullaştırılmış formları tablo adları olarak kullanılır.
- Varlık özelliği adları sütun adları için kullanılır.
- veya classname
ID
adlıID
varlık özellikleri birincil anahtar özellikleri olarak kabul edilir. - Bir özellik, gezinti özelliği adı birincil anahtar özellik adıysa <>><(örneğin,
StudentID
varlığınStudent
birincil anahtarı olduğundan gezinti özelliğiStudent
için) yabancı anahtar özelliği olarak yorumlanır.ID
Yabancı anahtar özellikleri aynı basit <birincil anahtar özellik adıyla> da adlandırılabilir (örneğin,EnrollmentID
varlığınEnrollment
birincil anahtarı olduğuEnrollmentID
için).
Kuralların geçersiz kılınabileceğini gördünüz. Örneğin, tablo adlarının çoğullaştırılmaması gerektiğini belirttiniz ve daha sonra bir özelliği açıkça yabancı anahtar özelliği olarak işaretlemeyi göreceksiniz.
Kodu alma
Ek kaynaklar
EF 6 hakkında daha fazla bilgi için şu makalelere bakın:
Sonraki adımlar
Bu öğreticide şunları yaptınız:
- MVC web uygulaması oluşturuldu
- Site stilini ayarlama
- Yüklü Entity Framework 6
- Veri modeli oluşturuldu
- Veritabanı bağlamı oluşturuldu
- Test verileriyle başlatılan VERITABANı
- EF 6'yı LocalDB kullanacak şekilde ayarlama
- Denetleyici ve görünümler oluşturuldu
- Veritabanı görüntülendi
Denetleyicilerinizde ve görünümlerinizde oluşturma, okuma, güncelleştirme, silme (CRUD) kodunu gözden geçirmeyi ve özelleştirmeyi öğrenmek için sonraki makaleye ilerleyin.