Öğretici: MVC 5 kullanarak Entity Framework 6 Code First kullanmaya başlama
Note
Yeni geliştirme için ASP.NET MVC denetleyicileri ve görünümleri üzerinde ASP.NET Core Razor Pages önerilir. Razor Pages ile benzer bir öğretici serisi için bkz. öğretici: ASP.NET Core Razor Pages kullanmaya başlama. Yeni öğretici:
- Daha kolay hale gelmelidir.
- Daha fazla EF Core en iyi yöntem sağlar.
- Daha verimli sorgular kullanır.
- En son API ile daha güncel.
- Daha fazla özellik içerir.
- , Yeni uygulama geliştirmesi 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şturma hakkında bilgi edineceksiniz. Bu öğretici Code First iş akışını kullanır. Code First, Database First ve Model First arasında seçim yapma hakkında daha fazla bilgi için bkz. model oluşturma.
Bu öğretici serisinde, Contoso Üniversitesi örnek uygulamasının nasıl oluşturulacağı açıklanmaktadır. Örnek uygulama, basit bir üniversite web sitesidir. Bununla birlikte öğrenciye, kursa ve eğitmen bilgilerini görüntüleyebilir ve güncelleştirebilirsiniz. Oluşturduğunuz ekranlardan ikisi şunlardır:


Bu öğreticide şunları yaptınız:
- MVC web uygulaması oluşturma
- Site stili Ayarla
- Entity Framework 6 ' yı yükler
- Veri modeli oluşturma
- Veritabanı bağlamını oluşturma
- Test verileriyle VERITABANıNı başlatma
- LocalDB kullanmak için EF 6 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 C# ASP.NET web uygulaması (.NET Framework) şablonunu kullanarak bir Web projesi oluşturun. Projeyi Contosouniversity olarak adlandırın ve Tamam' ı seçin.

Yeni ASP.NET Web uygulaması-ContosoUniversityiçinde MVC' yi seçin.

Note
Varsayılan olarak, kimlik doğrulama seçeneği kimlik doğrulaması yokolarak ayarlanır. Bu öğreticide, Web uygulaması kullanıcıların oturum açmasını gerektirmez. Ayrıca, erişimi kimin oturum açanlar temelinde kısıtlayamaz.
Projeyi oluşturmak için Tamam'ı seçin.
Site stili Ayarla
Birkaç basit değişiklik, site menüsünü, düzeni ve giriş sayfasını ayarlar.
Views\shared\_Layout. cshtmldosyasını açın ve aşağıdaki değişiklikleri yapın:
- "My ASP.NET Application" ve "Application Name" gibi her bir oluşumu "Contoso Üniversitesi" olarak değiştirin.
- Öğrenciler, kurslar, Eğitmenler ve departmanlar için menü girişleri ekleyin ve kişi girişini 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\ındex.cshtmliç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 bulunduğu giriş sayfasını görürsünüz.
Entity Framework 6 ' yı yükler
Araçlar menüsünde NuGet Paket Yöneticisi' ni ve ardından Paket Yöneticisi konsolu' nu seçin.
Paket Yöneticisi konsolu penceresinde, aşağıdaki komutu girin:
Install-Package EntityFramework
Bu adım, Bu öğreticinin el ile yaptığınız, ancak ASP.NET MVC scafkatlama özelliği tarafından otomatik olarak gerçekleştirilen birkaç adımdan biridir. Entity Framework (EF) kullanmak için gereken adımları görebilmeniz için bunları el ile yapabilirsiniz. MVC denetleyicisi ve görünümleri oluşturmak için daha sonra yapı iskelesi kullanacaksınız. Alternatif olarak, yapı iskelesi 'nin EF NuGet paketini otomatik olarak yüklemesini, veritabanı bağlamı sınıfını oluşturmasını ve bağlantı dizesini oluşturmasını sağlar. Bu şekilde başlamaya hazırsanız, tüm yapmanız gereken adımları atlayın ve varlık sınıflarınızı oluşturduktan sonra MVC denetleyicinizi dolandırıcılara katlayın.
Veri modeli 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 |
|---|---|
| Kayıt kursu | Bire çok |
| Kayıt için öğrenci | Bire çok |
Student ve Enrollment varlıkları arasında bire çok ilişki vardır ve Course ile Enrollment varlıkları arasında bire çok bir ilişki vardır. Diğer bir deyişle, bir öğrenci herhangi bir sayıda kursa kaydedilebilir ve bir kurs, kayıtlı sayıda öğrenciye sahip olabilir.
Aşağıdaki bölümlerde, bu varlıkların her biri için bir sınıf oluşturacaksınız.
Note
Projeyi bu varlık sınıflarının tümünü oluşturmayı bitirmeden önce derlemeye çalışırsanız derleyici hatalarıyla karşılaşırsınız.
Öğrenci varlık
Modeller klasöründe, Çözüm Gezgini klasöre 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; } } }
ID özelliği, bu sınıfa karşılık gelen veritabanı tablosunun birincil anahtar sütunu olacak. Varsayılan olarak, Entity Framework ID veya classname ID birincil anahtar olarak adlandırılan bir özelliği yorumlar.
Enrollments özelliği bir Gezinti özelliğidir. Gezinti özellikleri, bu varlıkla ilgili diğer varlıkları tutar. Bu durumda, bir Student varlığının Enrollments özelliği, bu Student varlıkla ilgili Enrollment varlıkların tümünü tutacaktır. Diğer bir deyişle, veritabanındaki belirli bir Student satırı, iki ilişkili Enrollment satırına sahiptir (Bu, StudentID yabancı anahtar sütununda öğrencinin birincil anahtar değerini içeren satırlar), bu Student varlığın Enrollments gezinti özelliği bu iki Enrollment varlığını içerir.
Gezinti özellikleri genellikle virtual olarak tanımlanır ve bu sayede, geç yüklemegibi belirli Entity Framework işlevsellikten yararlanabilir. (Bu serinin ilerleyen kısımlarında Ilgili verileri okuma öğreticisinde daha sonra geç yükleme açıklanmaktadır.)
Bir gezinti özelliği birden çok varlığı tutabileceiyorsa (çok-çok veya bire çok ilişkilerde olduğu gibi), türü ICollectiongibi girişlerin eklenebileceği, silinebileceği ve güncelleştirilemeyebilir bir liste olmalıdır.
Kayıt varlık
Modeller klasöründe enrollment.cs oluşturun ve mevcut kodu şu 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, Student varlığında gördüğünüz gibi, kendisini ID yerine classname ID modelini kullanır. Normalde tek bir model seçip veri modeliniz genelinde kullanabilirsiniz. Burada, değişim, her iki stili de kullanabileceğinizi gösterir. Daha sonraki bir öğreticide, classname olmadan ID kullanmanın, veri modelinde devralma uygulamayı daha kolay hale getiren bir durum görürsünüz.
Grade özelliği bir sabit listesi. Grade türü bildiriminden sonraki soru işareti, Grade özelliğinin null yapılabilirolduğunu gösterir. Null olan bir sınıf sıfır bir sınıfta farklılık gösterir. null, henüz bir sınıf bilinmediğini veya henüz atanmadığını belirtir.
StudentID özelliği bir yabancı anahtardır ve ilgili gezinti özelliği Student. Enrollment bir varlık bir Student varlığıyla ilişkilendirilir, bu nedenle özellik yalnızca tek bir Student varlığı tutabilir (daha önce gördüğünüz Student.Enrollments gezinti özelliğinden farklı olarak, birden çok Enrollment varlığı tutabilir).
CourseID özelliği bir yabancı anahtardır ve ilgili gezinti özelliği Course. Bir Enrollment varlığı bir Course varlığıyla ilişkilendirilir.
Entity Framework, <gezinti özelliği adı><birincil anahtar özellik adı> (StudentID varlığın birincil anahtarı Student olduğundan Student gezinti özelliği için ID) olarak adlandırılmışsa, bir özelliği yabancı anahtar özelliği olarak yorumlar. Yabancı anahtar özelliklerine aynı zamanda <birincil anahtar özellik adı> aynı şekilde adlandırılabilir (örneğin, Course varlığının birincil anahtarı CourseIDolduğundan CourseID).
Kurs varlık
Modeller klasöründe, şablon kodunu aşağıdaki kodla değiştirerek Course.csoluş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. Course bir varlık, herhangi bir sayıda Enrollment varlıkla ilişkili olabilir.
Bu serinin sonraki bir öğreticide DatabaseGeneratedAttribute özniteliği hakkında daha fazla bilgi edineceksiniz. Temel olarak bu öznitelik, veritabanının oluşturması yerine kursa ait birincil anahtarı girmenize olanak sağlar.
Veritabanı bağlamını 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 ekleneceğini belirtirsiniz. Ayrıca, belirli Entity Framework davranışlarını özelleştirebilirsiniz. Bu projede, sınıfı SchoolContextolarak adlandırılır.
ContosoUniversity projesinde bir klasör oluşturmak için Çözüm Gezgini ' de projeye sağ tıklayın ve Ekle' ye ve ardından Yeni klasör' e tıklayın. Yeni klasörü dal olarak adlandırın (veri erişim katmanı için). Bu klasörde, SchoolContext.csadlı yeni bir sınıf dosyası oluşturun ve şablon kodunu şu 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 terimlerinde, genellikle bir varlık kümesi bir veritabanı tablosuna karşılık gelir ve bir varlık tablodaki bir satıra karşılık gelir.
Note
DbSet<Enrollment> ve DbSet<Course> deyimlerini atlayabilirsiniz ve aynı şekilde çalışır. Entity Framework, Student varlık Enrollment varlığına başvurduğundan ve Enrollment varlığı Course varlığına başvurduğundan bunları örtülü olarak içerebilir.
Bağlantı dizesini belirtin
Bağlantı dizesinin adı (daha sonra Web. config dosyasına ekleyeceğiniz) oluşturucuya geçirilir.
public SchoolContext() : base("SchoolContext")
{
}
Ayrıca, Web. config dosyasında depolanan birinin adı yerine bağlantı dizesinin kendisini de geçirebilirsiniz. Kullanılacak veritabanını belirtme seçenekleri hakkında daha fazla bilgi için bkz. bağlantı dizeleri ve modeller.
Bir bağlantı dizesi veya bir adı belirtmezseniz, Entity Framework bağlantı dizesi adının sınıf adı ile aynı olduğunu varsayar. Bu örnekteki varsayılan bağlantı dizesi adı, açıkça belirtdiklerinize göre SchoolContext.
Tekil tablo adlarını belirtin
Onmodeloluþturma yöntemindeki modelBuilder.Conventions.Remove deyimleri, tablo adlarının plmasını önler. Bunu yapmadıysanız, veritabanındaki oluşturulan tablolar Students, Coursesve Enrollmentsolarak adlandırılır. Bunun yerine, tablo adları Student, Courseve Enrollmentolacaktır. Geliştiriciler tablo adlarının plmış olup olmayacağını kabul etmez. Bu öğretici tekil formunu kullanır, ancak önemli nokta bu kod satırını dahil ederek veya atlayarak tercih ettiğiniz formdan seçim yapabilirsiniz.
Test verileriyle VERITABANıNı başlatma
Entity Framework, uygulama çalışırken otomatik olarak bir veritabanı oluşturabilir (veya bırakıp yeniden oluşturabilir). Bu işlem, uygulamanız her çalıştığında veya yalnızca modelin var olan veritabanıyla eşitlenmemiş olması durumunda yapılması gerektiğini belirtebilirsiniz. Ayrıca, verileri test verileriyle doldurmak üzere veritabanını oluşturduktan sonra otomatik olarak çağıran bir Seed Entity Framework yöntemi yazabilirsiniz.
Varsayılan davranış yalnızca var olmayan bir veritabanı oluşturmaktır (ve model değiştirildiyse ve veritabanı zaten varsa bir özel durum oluşturur). Bu bölümde, veritabanının bırakılması ve model her değiştiğinde yeniden oluşturulması gerektiğini belirtirsiniz. Veritabanının düşürülmesi tüm verilerinizin kaybedilmesine neden olur. Bu genellikle geliştirme sırasında, Seed yöntemi veritabanı yeniden oluşturulduğunda çalışır ve test verilerinizi yeniden oluşturur. Ancak üretimde, her zaman veritabanı şemasını değiştirmeniz gerektiğinde tüm verilerinizi kaybetmek istemezsiniz. Daha sonra, veritabanını bırakıp yeniden oluşturmak yerine veritabanı şemasını değiştirmek için Code First Migrations kullanarak model değişikliklerini nasıl işleyeceğinizi göreceksiniz.
DAL klasöründe, SchoolInitializer.cs adlı yeni bir sınıf dosyası oluşturun ve şablon kodunu, gerektiğinde bir veritabanının oluşturulmasına neden olan aşağıdaki kodla değiştirin 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(); } } }Seedyöntemi, bir giriş parametresi olarak veritabanı bağlamı nesnesini alır ve yöntemdeki kod, veritabanına yeni varlıklar eklemek için bu nesneyi kullanır. Her varlık türü için, kod yeni varlıkların bir koleksiyonunu oluşturur, bunları uygunDbSetözelliğine ekler ve değişiklikleri veritabanına kaydeder. Burada yapılan her bir varlık grubundan sonraSaveChangesyöntemini çağırmak gerekmez, ancak bunu yapmak, kod veritabanına yazılırken bir özel durum oluşursa bir sorunun kaynağını bulmanıza yardımcı olur.Entity Framework Başlatıcı sınıfınızı kullanmasını söylemek için, aşağıdaki örnekte gösterildiği gibi uygulama Web. config dosyasındaki (kök proje klasöründeki)
entityFrameworköğesine 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>context typetam bağlam sınıfı adını ve içindeki derlemeyi belirtir vedatabaseinitializer typeBaşlatıcı sınıfının ve içindeki derlemenin tam adını belirtir. (EF 'in başlatıcıyı kullanmasını istemiyorsanız,contextöğesinde bir öznitelik ayarlayabilirsiniz:disableDatabaseInitialization="true".) Daha fazla bilgi için bkz. yapılandırma dosyası ayarları.Web. config dosyasında başlatıcıyı ayarlamaya bir alternatif, Global.asax.cs dosyasındaki
Application_StartyöntemineDatabase.SetInitializerbir ifade ekleyerek kodda kullanmaktır. Daha fazla bilgi için bkz. Entity Framework Code First veritabanı başlatıcıları anlama.
Uygulama, bir uygulamanın belirli bir çalıştırmasında veritabanına ilk kez eriştiğinizde Entity Framework, veritabanını modelle (SchoolContext ve varlık sınıflarınız) karşılaştırdığında bu şekilde ayarlanır. Fark varsa, uygulama veritabanını bırakır ve yeniden oluşturur.
Note
Bir uygulamayı bir üretim Web sunucusuna dağıttığınızda, veritabanını bırakan ve yeniden oluşturan kodu kaldırmanız veya devre dışı bırakmanız gerekir. Bu, bu serinin sonraki bir öğreticide bunu yapacaksınız.
LocalDB kullanmak için EF 6 ayarlama
LocalDB , SQL Server Express veritabanı altyapısının basit bir sürümüdür. Yüklemek ve yapılandırmak kolaydır, isteğe bağlı olarak başlar ve kullanıcı modunda çalışır. LocalDB, veritabanlarıyla . mdf dosyaları olarak çalışmanıza olanak sağlayan SQL Server Express özel bir yürütme modunda çalışır. Veritabanını projeyle kopyalayabilmek istiyorsanız, Web projesinin App_Data klasörüne LocalDB veritabanı dosyalarını koyabilirsiniz. SQL Server Express ' deki Kullanıcı örneği özelliği ayrıca . mdf dosyalarıyla çalışmanıza olanak sağlar ancak kullanıcı örneği özelliği kullanım dışıdır; Bu nedenle, LocalDB . mdf dosyalarıyla çalışma için önerilir. LocalDB, Visual Studio ile varsayılan olarak yüklenir.
Genellikle, SQL Server Express üretim Web uygulamaları için kullanılmaz. LocalDB 'nin IIS ile çalışmak üzere tasarlanmadığı için, bir Web uygulamasıyla üretim kullanımı önerilmez.
Bu öğreticide LocalDB ile çalışacaksınız. Uygulama Web. config dosyasını açın ve aşağıdaki örnekte gösterildiği gibi
appSettingsöğesinden önce birconnectionStringsöğesi ekleyin. ( Web. config dosyasını kök proje klasöründe güncelleştirdiğinizden emin olun. Ayrıca, 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, ContosoUniversity1. mdfadlı bir LocalDB veritabanı kullanacağınızı belirtir. (Veritabanı henüz yok ancak EF onu oluşturacak.) Veritabanını App_veri klasörünüzde oluşturmak istiyorsanız bağlantı dizesine AttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf ekleyebilirsiniz. Bağlantı dizeleri hakkında daha fazla bilgi için bkz. ASP.NET Web uygulamaları için SQL Server bağlantı dizeleri.
Aslında Web. config dosyasında bir bağlantı dizesine ihtiyacınız yoktur. Bir bağlantı dizesi vermezseniz 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 bir veritabanına Code First.
Denetleyici ve görünüm oluşturma
Artık verileri göstermek için bir Web sayfası oluşturacaksınız. Verileri isteme işlemi, veritabanının oluşturulmasını otomatik olarak tetikler. Yeni bir denetleyici oluşturarak başlarsınız. Ancak bunu yapmadan önce modeli ve bağlam sınıflarını MVC denetleyici yapı iskelesi için kullanılabilir hale getirmek için projeyi derleyin.
Çözüm Gezgini' de denetleyiciler klasörüne sağ tıklayın, Ekle' yi seçin ve ardından yeni yapı iskelesi öğesinetıklayın.
Yapı Iskelesi Ekle iletişim kutusunda, Entity Framework kullanarak, görünümler Içeren MVC 5 denetleyici' yi seçin ve ardından Ekle' yi seçin.

Denetleyici Ekle iletişim kutusunda aşağıdaki seçimleri yapın ve ardından Ekle' yi seçin:
Model Sınıfı: öğrenci (ContosoUniversity. modeller) . (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).
Diğer alanlar için varsayılan değerleri bırakın.
Ekle' ye tıkladığınızda, desteği bir StudentController.cs dosyası ve denetleyicisiyle birlikte çalışan bir dizi görünüm ( . cshtml dosyası) oluşturur. Entity Framework kullanan projeler oluşturduğunuzda, scaffolder 'ın bazı ek işlevlerinden de yararlanabilirsiniz: ilk model sınıfınızı oluşturma, bağlantı dizesi oluşturma ve ardından Denetleyici Ekle kutusunda veri bağlam sınıfınınyanındaki + düğmesini seçerek Yeni veri bağlamı belirtme. Desteği,
DbContextsınıfınızı ve Bağlantı dizenizi, ayrıca denetleyiciyi ve görünümleri oluşturacaktır.
Visual Studio, Controllers\studentcontroller.cs dosyasını açar. Bir veritabanı bağlamı nesnesini örnekleyen bir sınıf değişkeninin oluşturulduğunu görürsünüz:
private SchoolContext db = new SchoolContext();IndexAction yöntemi, veritabanı bağlamı örneğininStudentsözelliğini okuyarak öğrenciler varlık kümesinden öğrencilerin bir listesini alır:public ViewResult Index() { return View(db.Students.ToList()); }Student\ındex.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.)
Seedyönteminin eklendiği test verilerini görmek için öğrenciler sekmesine 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şmeyi denediğinde, bir veritabanı olmadığını ve bir tane oluşturduğunu tespit edin. EF daha sonra veritabanını verilerle doldurmak için çekirdek yöntemini çalıştırdı.
Visual Studio 'da veritabanını görüntülemek için Sunucu Gezgini ya da SQL Server Nesne Gezgini (ssox) kullanabilirsiniz. Bu öğretici için Sunucu Gezginikullanacaksınız.
Tarayıcıyı kapatın.
Sunucu Gezgini, veri bağlantıları ' nı genişletin (önce Yenile düğmesini seçmeniz gerekebilir), okul bağlamını (contosouniversity) genişletin ve sonra tabloları genişleterek yeni veritabanınızdaki tabloları görebilirsiniz .
Oluşturulan sütunları ve tabloya eklenmiş 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.
DropCreateDatabaseIfModelChanges başlatıcısı kullandığınızdan, artık Student sınıfında bir değişiklik yapabilirsiniz, uygulamayı yeniden çalıştırabilirsiniz ve veritabanı, değişikliklerinizi eşleştirmek için otomatik olarak yeniden oluşturulur. Örneğin, Student sınıfına bir EmailAddress özelliği eklerseniz, öğrenciler sayfasını yeniden çalıştırın ve ardından tabloya bir daha göz atın, yeni bir EmailAddress sütunu görürsünüz.
Kurallar
Kurallarnedeniyle en az bir veritabanı oluşturmak için Entity Framework yazmanız gereken kod miktarı veya Entity Framework varsayımlar sağlar. Bunlardan bazıları zaten belirtilmiştir veya farkında olmadıklarınız olmadan kullanılmıştır:
- Varlık sınıfı adlarının plurar biçimleri tablo adı olarak kullanılır.
- Varlık özelliği adları, sütun adları için kullanılır.
IDveya classnameIDadlı varlık özellikleri birincil anahtar özellikler olarak tanınır.- Bir özellik, bir yabancı anahtar özelliği olarak yorumlanır <gezinti özelliği adı><birincil anahtar özellik adı> (örneğin,
StudentID, birincil anahtarıStudentolduğundanStudentgezinti özelliği içinID). Yabancı anahtar özelliklerine aynı zamanda <birincil anahtar özellik adı> aynı şekilde adlandırılabilir (örneğin,Enrollmentvarlığının birincil anahtarıEnrollmentIDolduğundanEnrollmentID).
Kuralların geçersiz kılınabileceğini gördünüz. Örneğin, tablo adlarının plurulmamalıdır ve daha sonra bir özelliği bir yabancı anahtar özelliği olarak nasıl açıkça işaretleneceğini 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 stili Ayarla
- Entity Framework yüklendi 6
- Veri modeli oluşturuldu
- Veritabanı bağlamı oluşturuldu
- Test verileriyle VERITABANı başlatıldı
- LocalDB kullanmak için EF 6 ayarlama
- Denetleyici ve görünümler oluşturuldu
- Veritabanı görüntüleniyor
Denetleyicilerinizdeki ve görünümlerindeki oluşturma, okuma, güncelleştirme, silme (CRUD) kodunu incelemeyi ve özelleştirmeyi öğrenmek için sonraki makaleye ilerleyin.