Öğretici: Entity Framework 6 Code MVC 5 kullanarak First ile çalışmaya başlamaTutorial: Get Started with Entity Framework 6 Code First using MVC 5

Note

Yeni geliştirme projeleri için öneririz ASP.NET Core Razor sayfalar ASP.NET MVC denetleyicileri ve görünümleri üzerinden.For new development, we recommend ASP.NET Core Razor Pages over ASP.NET MVC controllers and views. Aşağıdakine benzer bir öğretici serisinin için Razor sayfaları kullanarak bkz Öğreticisi: ASP.NET Core Razor sayfaları kullanmaya başlama.For a tutorial series similar to this one using Razor Pages, see Tutorial: Get started with Razor Pages in ASP.NET Core. Yeni öğretici:The new tutorial:

  • İzlemek daha kolay olur.Is easier to follow.
  • Daha fazla EF Core en iyi uygulamalar sağlanır.Provides more EF Core best practices.
  • Daha verimli sorgular kullanır.Uses more efficient queries.
  • En yeni API ile daha güncel değil.Is more current with the latest API.
  • Daha fazla özellikleri kapsar.Covers more features.
  • Yeni uygulama geliştirme için tercih edilen yaklaşımdır.Is the preferred approach for new application development.

Bu öğretici serisinde, veri erişimi için Entity Framework 6 kullanan bir ASP.NET MVC 5 uygulaması derlemeyi öğrenin.In this series of tutorials, you learn how to build an ASP.NET MVC 5 application that uses Entity Framework 6 for data access. Bu öğretici, Code First iş akışını kullanır.This tutorial uses the Code First workflow. Code First, ilk veritabanı ve Model ilk arasında seçim yapma hakkında daha fazla bilgi için bkz. model oluşturma.For information about how to choose between Code First, Database First, and Model First, see Create a model.

Bu öğretici serisinde Contoso University örnek uygulamanın nasıl oluşturulacağını açıklar.This tutorial series explains how to build the Contoso University sample application. Örnek uygulama, bir basit university Web sitesidir.The sample application is a simple university website. Bununla, görüntüleyebilir ve Öğrenci, kurs ve Eğitmen bilgileri güncelleştirin.With it, you can view and update student, course, and instructor information. İki oluşturduğunuz ekranlar şunlardır:Here are two of the screens you create:

Students_Index_page

Öğrenciyi Düzenle

Bu öğreticide şunları yaptınız:In this tutorial, you:

  • Bir MVC web uygulaması oluşturmaCreate an MVC web app
  • Site stili AyarlaSet up the site style
  • Entity Framework 6 yükleyinInstall Entity Framework 6
  • Veri modeli oluşturmaCreate the data model
  • Veritabanı bağlamı oluştururCreate the database context
  • DB test verileri ile başlatılamıyorInitialize DB with test data
  • EF 6 ' Localdb'yi kullanmak üzere ayarlaSet up EF 6 to use LocalDB
  • Denetleyici ve görünümler oluşturmaCreate controller and views
  • Veritabanı görünümüView the database

ÖnkoşullarPrerequisites

Bir MVC web uygulaması oluşturmaCreate an MVC web app

  1. Visual Studio'yu açın ve oluşturma bir C# web projesi kullanarak ASP.NET Web uygulaması (.NET Framework) şablonu.Open Visual Studio and create a C# web project using the ASP.NET Web Application (.NET Framework) template. Projeyi adlandırın ContosoUniversity seçip Tamam.Name the project ContosoUniversity and select OK.

    Visual Studio'da yeni proje iletişim kutusu

  2. İçinde yeni ASP.NET Web uygulaması - ContosoUniversityseçin MVC.In New ASP.NET Web Application - ContosoUniversity, select MVC.

    Visual Studio'da yeni web uygulaması iletişim kutusu

    Note

    Varsayılan olarak, kimlik doğrulaması seçeneği kimlik doğrulaması yok.By default, the Authentication option is set to No Authentication. Bu öğreticide, web uygulaması oturum açmalarını gerektirmez.For this tutorial, the web app doesn't require users to sign in. Ayrıca, bunu kimin imzalı dayalı olarak erişimi kısıtlamaz.Also, it doesn't restrict access based on who's signed in.

  3. Seçin Tamam projeyi oluşturmak için.Select OK to create the project.

Site stili AyarlaSet up the site style

Birkaç basit değişiklikler site menü, Düzen ve giriş sayfasına ayarlar.A few simple changes will set up the site menu, layout, and home page.

  1. Açık görünümler/paylaşılan\_Layout.cshtmlve aşağıdaki değişiklikleri yapın:Open Views\Shared\_Layout.cshtml, and make the following changes:

    • "Contoso Üniversitesi" için "My ASP.NET Application" ve "Uygulama adı" her örneğini değiştirin.Change each occurrence of "My ASP.NET Application" and "Application name" to "Contoso University".
    • Öğrenciler, kurslara, eğitmenler ve Departmanlar için menü girişler ekleyin ve ilgili girişi silebilirsiniz.Add menu entries for Students, Courses, Instructors, and Departments, and delete the Contact entry.

    Değişiklikler, aşağıdaki kod parçacığında vurgulanır:The changes are highlighted in the following code snippet:

    <!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>&copy; @DateTime.Now.Year - Contoso University</p>
            </footer>
        </div>
    
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/bootstrap")
        @RenderSection("scripts", required: false)
    </body>
    </html>
    
  2. İçinde Views\Home\Index.cshtml, dosyanın içeriğini bu uygulamayla ilgili metin ile ASP.NET ve MVC hakkında metnin değiştirmek için aşağıdaki kodla değiştirin:In Views\Home\Index.cshtml, replace the contents of the file with the following code to replace the text about ASP.NET and MVC with text about this application:

    @{
        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 &raquo;</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 &raquo;</a></p>
        </div>
    </div>
    
  3. Web sitesi çalıştırmak için CTRL + F5 tuşlarına basın.Press Ctrl+F5 to run the web site. Ana menü ile giriş sayfası görürsünüz.You see the home page with the main menu.

Entity Framework 6 yükleyinInstall Entity Framework 6

  1. Gelen Araçları menüsünde seçin NuGet Paket Yöneticisive ardından Paket Yöneticisi Konsolu.From the Tools menu, choose NuGet Package Manager, and then choose Package Manager Console.

  2. İçinde Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu girin:In the Package Manager Console window, enter the following command:

    Install-Package EntityFramework
    

Bu adım, Bu öğretici, el ile olan ancak, otomatik olarak ASP.NET MVC iskele kurma özelliği tarafından yapılmış, birkaç adımda biridir.This step is one of a few steps that this tutorial has you do manually, but that could have been done automatically by the ASP.NET MVC scaffolding feature. Entity Framework (EF) kullanmak için gerekli adımları görebilmeniz için bunları el ile yaptığınız.You're doing them manually so that you can see the steps required to use Entity Framework (EF). MVC denetleyicisi ve görünümleri oluşturmak için yapı iskelesi daha sonra kullanacaksınız.You'll use scaffolding later to create the MVC controller and views. Otomatik olarak EF NuGet paketini yüklemek, veritabanı bağlamı sınıfının oluşturma ve bağlantı dizesini oluşturmak yapı iskelesi izin vermek için kullanılan bir alternatiftir.An alternative is to let scaffolding automatically install the EF NuGet package, create the database context class, and create the connection string. Bu şekilde yapmak hazır olduğunuzda, yapmanız gereken tek şey bu adımları atlayın ve varlık sınıflarınızı oluşturduktan sonra MVC denetleyicisi iskelesini.When you're ready to do it that way, all you have to do is skip those steps and scaffold your MVC controller after you create your entity classes.

Veri modeli oluşturmaCreate the data model

Sonraki varlık sınıfları Contoso University uygulaması oluşturacaksınız.Next you'll create entity classes for the Contoso University application. Aşağıdaki üç varlıklarla başlayacaksınız:You'll start with the following three entities:

Kurs <-> kayıt <-> ÖğrenciCourse <-> Enrollment <-> Student

VarlıklarEntities İlişkiRelationship
Kayıt için kursCourse to Enrollment -ÇokOne-to-many
Kayıt için ÖğrenciStudent to Enrollment -ÇokOne-to-many

Arasında bir-çok ilişkisi Student ve Enrollment varlıkları ve bir-çok ilişkisi arasında Course ve Enrollment varlıklar.There's a one-to-many relationship between Student and Enrollment entities, and there's a one-to-many relationship between Course and Enrollment entities. Diğer bir deyişle, bir öğrenci herhangi bir sayıda kursları kaydedilebilir ve bir kurs herhangi bir sayıda Öğrenciler içinde kayıtlı olabilir.In other words, a student can be enrolled in any number of courses, and a course can have any number of students enrolled in it.

Aşağıdaki bölümlerde, bu varlıkların her biri için bir sınıf oluşturacaksınız.In the following sections, you'll create a class for each one of these entities.

Note

Tüm bu varlık sınıfları oluşturma tamamlanmadan önce projeyi derlemeyi denerseniz derleyici hataları alırsınız.If you try to compile the project before you finish creating all of these entity classes, you'll get compiler errors.

Öğrenci varlıkThe Student entity

  • İçinde modelleri klasöründe adlı bir sınıf dosyası oluşturma Student.cs klasöre sağ tıklayarak Çözüm Gezgini seçip Ekle > Sınıfı.In the Models folder, create a class file named Student.cs by right-clicking on the folder in Solution Explorer and choosing Add > Class. Şablon kodunu aşağıdaki kodla değiştirin:Replace the template code with the following code:

    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ıf için karşılık gelen veritabanı tablosunun birincil anahtar sütunu olacak.The ID property will become the primary key column of the database table that corresponds to this class. Varsayılan olarak Entity Framework adlı bir özellik yorumlar ID veya classname ID birincil anahtar olarak.By default, Entity Framework interprets a property that's named ID or classname ID as the primary key.

Enrollments Özelliği bir gezinti özelliği.The Enrollments property is a navigation property. Gezinti özellikleri bu varlıkla ilgili diğer varlıkların tutun.Navigation properties hold other entities that are related to this entity. Bu durumda, Enrollments özelliği bir Student varlık tüm tutun Enrollment olarak ilişkili varlıkları Student varlık.In this case, the Enrollments property of a Student entity will hold all of the Enrollment entities that are related to that Student entity. Diğer bir deyişle, varsa bir verilen Student satır veritabanında ilgili iki sahip Enrollment satırları (Bu öğrencinin birincil anahtarını içeren satır değerini kendi StudentID yabancı anahtar sütunu), bu Student varlığın Enrollments gezinme özelliği Bu iki içerecek Enrollment varlıklar.In other words, if a given Student row in the database has two related Enrollment rows (rows that contain that student's primary key value in their StudentID foreign key column), that Student entity's Enrollments navigation property will contain those two Enrollment entities.

Gezinti özellikleri olarak tanımlanmış genellikle virtual bunlar belirli Entity Framework işlevleri gibi yararlanabilir, böylece yavaş Yükleniyor.Navigation properties are typically defined as virtual so that they can take advantage of certain Entity Framework functionality such as lazy loading. (Gecikmeli yükleme verilecektir daha sonra ilgili verileri okuma bu serideki sonraki öğretici.)(Lazy loading will be explained later, in the Reading Related Data tutorial later in this series.)

Bir gezinme özelliği (bire çok veya tek-çok ilişkilerde) olduğu gibi birden çok varlık tutarsanız, girişleri eklenebilir, silindi ve gibi güncelleştirilmiş bir listesi türü olmalıdır ICollection.If a navigation property can hold multiple entities (as in many-to-many or one-to-many relationships), its type must be a list in which entries can be added, deleted, and updated, such as ICollection.

Kayıt varlıkThe Enrollment entity

  • İçinde modelleri klasör oluşturma Enrollment.cs ve varolan kodu aşağıdaki kodla değiştirin:In the Models folder, create Enrollment.cs and replace the existing code with the following code:

    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 Birincil anahtar özelliği olacaktır; bu varlığı kullanan classname ID yerine desen ID gördüğünüz şekilde kendisi Student varlık.The EnrollmentID property will be the primary key; this entity uses the classname ID pattern instead of ID by itself as you saw in the Student entity. Genellikle bir düzen seçin ve veri modelinizi kullanılmakta.Ordinarily you would choose one pattern and use it throughout your data model. Burada, değişim ya da Desen kullanabilirsiniz gösterilmektedir.Here, the variation illustrates that you can use either pattern. Bir sonraki öğreticide gördüğünüz kullanıldığında nasıl ID olmadan classname devralma veri modelinde uygulamak kolaylaştırır.In a later tutorial, you'll see how using ID without classname makes it easier to implement inheritance in the data model.

Grade Özelliği bir enum.The Grade property is an enum. Sonra soru işareti Grade türü bildirimi gösterir Grade özelliği boş değer atanabilir.The question mark after the Grade type declaration indicates that the Grade property is nullable. Boş bir sınıf bir sıfır sınıf farklıdır — bir sınıf bilinen değil veya henüz atanmamış null anlamına gelir.A grade that's null is different from a zero grade — null means a grade isn't known or hasn't been assigned yet.

StudentID Özelliği olduğundan yabancı anahtar ve karşılık gelen gezinme özelliğini Student.The StudentID property is a foreign key, and the corresponding navigation property is Student. Bir Enrollment varlıktır biriyle ilişkili Student özelliği yalnızca tek bir içerebileceği için varlık Student varlık (aksine Student.Enrollments gezinti özelliği gördüğünüz önceki sürümlerinde, birden çok tutabilir Enrollment varlıklar).An Enrollment entity is associated with one Student entity, so the property can only hold a single Student entity (unlike the Student.Enrollments navigation property you saw earlier, which can hold multiple Enrollment entities).

CourseID Özelliği olduğundan yabancı anahtar ve karşılık gelen gezinme özelliğini Course.The CourseID property is a foreign key, and the corresponding navigation property is Course. Bir Enrollment varlıktır biriyle ilişkili Course varlık.An Enrollment entity is associated with one Course entity.

Entity Framework adlandırılmışsa, bu özellik bir yabancı anahtar özellik olarak yorumlar <gezinme özelliği adı><birincil anahtar özelliği adı> (örneğin, StudentIDiçin Student gezinti özelliği bu yana Student varlığın birincil anahtarı ID).Entity Framework interprets a property as a foreign key property if it's named <navigation property name><primary key property name> (for example, StudentID for the Student navigation property since the Student entity's primary key is ID). Yabancı anahtar özellikleri de adı aynı yalnızca <birincil anahtar özelliği adı> (örneğin, CourseID beri Course varlığın birincil anahtarı CourseID).Foreign key properties can also be named the same simply <primary key property name> (for example, CourseID since the Course entity's primary key is CourseID).

Kurs varlıkThe Course entity

  • İçinde modelleri klasör oluşturma Course.cs, şablon kodunu aşağıdaki kodla değiştirin:In the Models folder, create Course.cs, replacing the template code with the following code:

    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 Özelliktir bir gezinme özelliği.The Enrollments property is a navigation property. A Course varlık dilediğiniz sayıda ilgili olabileceğini Enrollment varlıklar.A Course entity can be related to any number of Enrollment entities.

Daha fazla ilgili dediğimiz DatabaseGeneratedAttribute bu serinin sonraki bir eğitimde özniteliği.We'll say more about the DatabaseGeneratedAttribute attribute in a later tutorial in this series. Temel olarak, bu öznitelik kursu yerine için oluşturmak veritabanı birincil anahtarı girmenize olanak tanır.Basically, this attribute lets you enter the primary key for the course rather than having the database generate it.

Veritabanı bağlamı oluştururCreate the database context

Verilen veri modeli için Entity Framework işlevselliği koordine eden ana sınıftır veritabanı bağlamı sınıfı.The main class that coordinates Entity Framework functionality for a given data model is the database context class. Türeterek Bu sınıf oluşturduğunuz System.Data.Entity.DbContext sınıfı.You create this class by deriving from the System.Data.Entity.DbContext class. Kodunuzda, hangi varlıkları veri modelinde yer alan belirtin.In your code, you specify which entities are included in the data model. Ayrıca, belirli bir Entity Framework davranış özelleştirebilirsiniz.You can also customize certain Entity Framework behavior. Bu projede adlı sınıfı SchoolContext.In this project, the class is named SchoolContext.

  • ContosoUniversity projeye bir klasör oluşturmak için projeye sağ Çözüm Gezgini tıklatıp Ekleve ardından yeni klasör.To create a folder in the ContosoUniversity project, right-click the project in Solution Explorer and click Add, and then click New Folder. Yeni klasör adı DAL (için veri erişim katmanı).Name the new folder DAL (for Data Access Layer). Adlı yeni bir sınıf dosyası bu klasörde oluşturma SchoolContext.cs, şablonu kodu aşağıdaki kodla değiştirin:In that folder, create a new class file named SchoolContext.cs, and replace the template code with the following code:

    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ümesi belirtmeSpecify entity sets

Bu kod oluşturur bir olan DB her varlık kümesi özelliği.This code creates a DbSet property for each entity set. Entity Framework terminolojisinde, bir varlık kümesi genellikle bir veritabanı tablosuna karşılık gelir ve bir varlık tablosunda bir satıra karşılık gelir.In Entity Framework terminology, an entity set typically corresponds to a database table, and an entity corresponds to a row in the table.

Note

Atlayabilirsiniz DbSet<Enrollment> ve DbSet<Course> deyimleri ve aynı şekilde çalışır.You can omit the DbSet<Enrollment> and DbSet<Course> statements and it would work the same. Entity Framework dahil bunları örtük olarak çünkü Student varlık başvuruları Enrollment varlık ve Enrollment varlık başvuruları Course varlık.Entity Framework would include them implicitly because the Student entity references the Enrollment entity and the Enrollment entity references the Course entity.

Bağlantı dizesini belirtinSpecify the connection string

(Bu, Web.config dosyasında daha sonra ekleyeceksiniz) bağlantı dizesinin adını oluşturucuya geçirilir.The name of the connection string (which you'll add to the Web.config file later) is passed in to the constructor.

public SchoolContext() : base("SchoolContext")
{
}

Bağlantı dizesindeki kendisini Web.config dosyasında depolanan bir adı yerine geçirebiliriz.You could also pass in the connection string itself instead of the name of one that is stored in the Web.config file. Veritabanını belirtmek için kullanılacak seçenekleri hakkında daha fazla bilgi için bkz. bağlantı dizelerini ve modelleri.For more information about options for specifying the database to use, see Connection strings and models.

Bir bağlantı dizesi veya birisinin adını açıkça belirtmezseniz, Entity Framework bağlantı dizesi adı sınıfın adıyla aynı olduğu varsayılır.If you don't specify a connection string or the name of one explicitly, Entity Framework assumes that the connection string name is the same as the class name. Bu örnekte varsayılan bağlantı dizesi adı ardından olacaktır SchoolContext, ne, açıkça belirtmekle aynı.The default connection string name in this example would then be SchoolContext, the same as what you're specifying explicitly.

Tekil tablo adları belirtinSpecify singular table names

modelBuilder.Conventions.Remove Deyiminde OnModelCreating yöntemi pluralized tablo adları engeller.The modelBuilder.Conventions.Remove statement in the OnModelCreating method prevents table names from being pluralized. Bunu yapmadıysanız, veritabanında oluşturulan tabloları sayfadayken Students, Courses, ve Enrollments.If you didn't do this, the generated tables in the database would be named Students, Courses, and Enrollments. Bunun yerine, tablo adları olacaktır Student, Course, ve Enrollment.Instead, the table names will be Student, Course, and Enrollment. Geliştiriciler olup tablo adları veya pluralized hakkında katılmıyorum.Developers disagree about whether table names should be pluralized or not. Bu öğreticide tekil kullanır, ancak en önemli nokta dahil olmak üzere veya bu kod satırı atlama tercih hangi formu seçebilirsiniz.This tutorial uses the singular form, but the important point is that you can select whichever form you prefer by including or omitting this line of code.

DB test verileri ile başlatılamıyorInitialize DB with test data

Entity Framework otomatik olarak oluşturabilir (veya drop yeniden oluşturmak için uygulama çalıştığında bir veritabanı ve).Entity Framework can automatically create (or drop and re-create) a database for you when the application runs. Bu, uygulama her çalıştırıldığında ya da model mevcut veritabanı ile eşitlenmemiş olduğunda yapılması gerektiğini belirtebilirsiniz.You can specify that this should be done every time your application runs or only when the model is out of sync with the existing database. Ayrıca yazabileceğiniz bir Seed yöntemi, Entity Framework otomatik olarak çağıran test verileri ile doldurmak için veritabanını oluşturduktan sonra.You can also write a Seed method that Entity Framework automatically calls after creating the database in order to populate it with test data.

Yalnızca olmayan mevcut (ve modeli değişti ve veritabanı zaten mevcut değilse bir özel durum halinde) bir veritabanı oluşturmak için varsayılan davranıştır.The default behavior is to create a database only if it doesn't exist (and throw an exception if the model has changed and the database already exists). Bu bölümde, veritabanı bırakılacak ve model değiştiğinde yeniden oluşturulması gerektiğini belirtirsiniz.In this section, you'll specify that the database should be dropped and re-created whenever the model changes. Veritabanını silmek, tüm veri kaybına neden olur.Dropping the database causes the loss of all your data. Bu genellikle Tamam geliştirme sırasında çünkü Seed yöntemi çalıştırılacağı veritabanını yeniden oluşturulduğunda ve test verilerini yeniden oluşturun.This is generally okay during development, because the Seed method will run when the database is re-created and will re-create your test data. Ancak, üretim ortamında genellikle veritabanı şemasını değiştirmeniz gereken her zaman tüm verilerinizi kaybetmek istemediğiniz.But in production you generally don't want to lose all your data every time you need to change the database schema. Daha sonra bırakarak ve veritabanını yeniden oluşturma yerine veritabanı şemasını değiştirmek için Code First Migrations'ı kullanarak model değişikliklerin üstesinden nasıl görürsünüz.Later you'll see how to handle model changes by using Code First Migrations to change the database schema instead of dropping and re-creating the database.

  1. DAL klasöründe adlı yeni bir sınıf dosyası oluşturma SchoolInitializer.cs şablon kodunu gerektiğinde oluşturulması için bir veritabanı neden aşağıdaki kodla değiştirin ve yeni veritabanına yüklerini test verileri.In the DAL folder, create a new class file named SchoolInitializer.cs and replace the template code with the following code, which causes a database to be created when needed and loads test data into the new database.

    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 giriş parametresi olarak veritabanı bağlam nesnesi alır ve yeni varlıklar eklemek için bu nesne yöntemindeki kodu kullanır.The Seed method takes the database context object as an input parameter, and the code in the method uses that object to add new entities to the database. Her varlık türü için kodu yeni varlıklar koleksiyonu oluşturur, bunları uygun ekler DbSet özellik ve değişiklikleri veritabanına kaydeder.For each entity type, the code creates a collection of new entities, adds them to the appropriate DbSet property, and then saves the changes to the database. Çağrı için gerekli olmayan SaveChanges yöntemi her grubu varlıkların sonra olarak burada yapılır, ancak, bunu yardımcı olur, veritabanına kod yazarken bir özel durum oluşursa, bir sorunun kaynağını bulun.It isn't necessary to call the SaveChanges method after each group of entities, as is done here, but doing that helps you locate the source of a problem if an exception occurs while the code is writing to the database.

  2. Başlatıcı sınıfınıza kullanmak için Entity Framework bildirmek için bir öğeye eklediğiniz entityFramework uygulama öğesinde Web.config dosyasını (projenin kök klasöründe), aşağıdaki örnekte gösterildiği gibi:To tell Entity Framework to use your initializer class, add an element to the entityFramework element in the application Web.config file (the one in the root project folder), as shown in the following example:

    <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 type Bağlam tam sınıf adı ve içinde derleme belirtir ve databaseinitializer type Başlatıcı sınıfı ve içinde derleme tam olarak nitelenmiş adını belirtir.The context type specifies the fully qualified context class name and the assembly it's in, and the databaseinitializer type specifies the fully qualified name of the initializer class and the assembly it's in. (EF Başlatıcı kullanmak istemediğinizde, üzerinde bir öznitelik ayarlayabilirsiniz context öğesi: disableDatabaseInitialization="true".) Daha fazla bilgi için yapılandırma dosyası ayarlarının.(When you don't want EF to use the initializer, you can set an attribute on the context element: disableDatabaseInitialization="true".) For more information, see Configuration File Settings.

    Başlatıcı ayarı alternatif Web.config dosyasıdır yapmak için kod ekleyerek bir Database.SetInitializer ifadesine Application_Start yönteminde Global.asax.cs dosya.An alternative to setting the initializer in the Web.config file is to do it in code by adding a Database.SetInitializer statement to the Application_Start method in the Global.asax.cs file. Daha fazla bilgi için anlama veritabanı başlatıcılar, Entity Framework Code First.For more information, see Understanding Database Initializers in Entity Framework Code First.

Böylece uygulamanın belirli bir çalıştırma ilk kez veritabanına eriştiğinizde, Entity Framework veritabanı modeline karşılaştırır. uygulamayı şimdi ayarlanır (sizin SchoolContext ve varlık sınıfları).The application is now set up so that when you access the database for the first time in a given run of the application, Entity Framework compares the database to the model (your SchoolContext and entity classes). Bir fark varsa uygulamanın bırakır ve veritabanını yeniden oluşturur.If there's a difference, the application drops and re-creates the database.

Note

Bir üretim web sunucusu için bir uygulama dağıttığınızda, kaldırın veya devre dışı bırakır ve veritabanını yeniden oluşturan kodu.When you deploy an application to a production web server, you must remove or disable code that drops and re-creates the database. Bu, bir sonraki Öğreticide bu serideki gerçekleştirirsiniz.You'll do that in a later tutorial in this series.

EF 6 ' Localdb'yi kullanmak üzere ayarlaSet up EF 6 to use LocalDB

LocalDB SQL Server Express Veritabanı Altyapısı'nın basit bir sürümüdür.LocalDB is a lightweight version of the SQL Server Express database engine. Yüklemek ve yapılandırmak kolay, isteğe bağlı olarak başlatılır ve kullanıcı modunda çalışır.It's easy to install and configure, starts on demand, and runs in user mode. Bir özel yürütme modu veritabanları ile çalışmanıza olanak tanır SQL Server Express LocalDB çalışan .mdf dosyaları.LocalDB runs in a special execution mode of SQL Server Express that enables you to work with databases as .mdf files. LocalDB veritabanı dosyaları koyabilirsiniz uygulama_veri proje ile veritabanını kopyalamak isterseniz web projesinin klasörüne.You can put LocalDB database files in the App_Data folder of a web project if you want to be able to copy the database with the project. SQL Server Express kullanıcı örneği özelliği de ile çalışmanıza olanak tanır .mdf dosyaları, ancak kullanıcı örneği özelliği kullanım dışıdır; bu nedenle, LocalDB ile çalışma için önerilir .mdf dosyaları.The user instance feature in SQL Server Express also enables you to work with .mdf files, but the user instance feature is deprecated; therefore, LocalDB is recommended for working with .mdf files. LocalDB, Visual Studio ile varsayılan olarak yüklenir.LocalDB is installed by default with Visual Studio.

Genellikle, SQL Server Express üretim web uygulamaları için kullanılmaz.Typically, SQL Server Express is not used for production web applications. IIS ile çalışmak için tasarlanmamıştır, çünkü LocalDB bir web uygulaması ile üretim kullanımı için özellikle önerilmez.LocalDB in particular is not recommended for production use with a web application because it's not designed to work with IIS.

  • Bu öğreticide, LocalDB ile çalışırsınız.In this tutorial, you'll work with LocalDB. Uygulamayı açmak Web.config dosya ve ekleme bir connectionStrings öğesi önceki appSettings öğesi, aşağıdaki örnekte gösterildiği gibi.Open the application Web.config file and add a connectionStrings element preceding the appSettings element, as shown in the following example. (Güncelleştirdiğinizden emin olun Web.config kök proje klasöründeki dosya.(Make sure you update the Web.config file in the root project folder. Ayrıca bir Web.config dosyası görünümleri alt güncelleştirmeniz gerekmez.)There's also a Web.config file in the Views subfolder that you don't need to update.)

    <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ı dizesini varlık çerçevesi adlı bir LocalDB veritabanına kullanacağını belirtir. ContosoUniversity1.mdf.The connection string you've added specifies that Entity Framework will use a LocalDB database named ContosoUniversity1.mdf. (EF oluşturur ancak veritabanı henüz mevcut değil.) Veritabanı oluşturmak istiyorsanız, uygulama_veri klasör ekleyebilirsiniz AttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf bağlantı dizesi.(The database doesn't exist yet but EF will create it.) If you want to create the database in your App_Data folder, you could add AttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf to the connection string. Bağlantı dizeleri hakkında daha fazla bilgi için bkz. ASP.NET Web uygulamaları için SQL Server bağlantı dizelerini.For more information about connection strings, see SQL Server Connection Strings for ASP.NET Web Applications.

Bağlantı dizesinde gerçekten ihtiyacınız yoksa Web.config dosya.You don't actually need a connection string in the Web.config file. Bir bağlantı dizesi sağlamazsanız, Entity Framework bağlam sınıfınıza dayalı bir varsayılan bağlantı dizesini kullanır.If you don't supply a connection string, Entity Framework uses a default connection string based on your context class. Daha fazla bilgi için yeni veritabanına Code First.For more information, see Code First to a New Database.

Denetleyici ve görünümler oluşturmaCreate controller and views

Artık verileri görüntülemek için bir web sayfası oluşturacaksınız.Now you'll create a web page to display data. Veritabanı oluşturma verileri otomatik olarak isteme işlemini tetikler.The process of requesting the data automatically triggers the creation of the database. Yeni bir denetleyici oluşturarak başlarsınız.You'll begin by creating a new controller. Ancak bunu yapmadan önce modeli ve bağlam sınıfları MVC denetleyicisi yapı iskelesi kullanılabilir hale getirmek için projeyi derleyin.But before you do that, build the project to make the model and context classes available to MVC controller scaffolding.

  1. Sağ denetleyicileri klasöründe Çözüm Gezginiseçin Ekleve ardından yeni iskele kurulmuş öğe.Right-click the Controllers folder in Solution Explorer, select Add, and then click New Scaffolded Item.

  2. İçinde İskele Ekle iletişim kutusunda MVC 5 denetleyici Entity Framework kullanarak görünümler ileve ardından Ekle.In the Add Scaffold dialog box, select MVC 5 Controller with views, using Entity Framework, and then choose Add.

    Visual Studio'da İskelesi iletişim Ekle

  3. İçinde denetleyici Ekle iletişim kutusunda, aşağıdaki seçimleri yapın ve ardından Ekle:In the Add Controller dialog box, make the following selections, and then choose Add:

    • Model sınıfı: Öğrenci (ContosoUniversity.Models).Model class: Student (ContosoUniversity.Models). (Aşağı açılan listede bu seçeneği görmüyorsanız, projeyi oluşturun ve yeniden deneyin.)(If you don't see this option in the drop-down list, build the project and try again.)

    • Veri bağlamı sınıfı: SchoolContext (ContosoUniversity.DAL).Data context class: SchoolContext (ContosoUniversity.DAL).

    • Denetleyici adı: StudentController (StudentsController değil).Controller name: StudentController (not StudentsController).

    • Diğer alanları varsayılan değerleri bırakın.Leave the default values for the other fields.

      Tıkladığınızda Ekle, iskele kurucu oluşturur bir StudentController.cs dosyası ve bir görünüm kümesi (.cshtml dosyaları) Denetleyici ile çalışır.When you click Add, the scaffolder creates a StudentController.cs file and a set of views (.cshtml files) that work with the controller. Gelecekte Entity Framework kullanan projeleri oluşturduğunuzda, aynı zamanda bazı ek işlevsellik iskele kurucu, yararlanabilirsiniz: ilk model sınıfınızın oluşturmak, bir bağlantı dizesi oluşturma ve ardından DenetleyiciEkle kutusunda belirtin yeni veri bağlamı seçerek + düğmesinin yanındaki veri bağlamı sınıfının.In the future when you create projects that use Entity Framework, you can also take advantage of some additional functionality of the scaffolder: create your first model class, don't create a connection string, and then in the Add Controller box specify New data context by selecting the + button next to Data context class. İskele kurucu oluşturacak, DbContext sınıfı, bağlantı dizesi denetleyici ve görünüm yanı sıra.The scaffolder will create your DbContext class and your connection string as well as the controller and views.

  4. Visual Studio açılır Controllers\StudentController.cs dosya.Visual Studio opens the Controllers\StudentController.cs file. Bir sınıf değişken bir veritabanı bağlam nesnesi başlatan oluşturulduğunu görürsünüz:You see that a class variable has been created that instantiates a database context object:

    private SchoolContext db = new SchoolContext();
    

    Index Eylem yöntemine öğrencilerden listesini alır Öğrenciler varlık kümesi okuyarak Students veritabanı bağlam örneğinin özelliği:The Index action method gets a list of students from the Students entity set by reading the Students property of the database context instance:

    public ViewResult Index()
    {
        return View(db.Students.ToList());
    }
    

    Student\Index.cshtml bu liste bir tabloda görüntüleyen:The Student\Index.cshtml view displays this list in a table:

    <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>
    }
    
  5. Projeyi çalıştırmak için CTRL + F5 tuşlarına basın.Press Ctrl+F5 to run the project. (Bir "Gölge kopyası oluşturulamıyor" hata alırsanız, tarayıcıyı kapatın ve yeniden deneyin.)(If you get a "Cannot create Shadow Copy" error, close the browser and try again.)

    Tıklayın Öğrenciler test verilerini görmek için sekmesinde, Seed eklenen yöntemi.Click the Students tab to see the test data that the Seed method inserted. Nasıl bağlı olarak tarayıcı pencerenizin darsa, ilk adres çubuğundaki Öğrenci sekmesini bağlantı görürsünüz veya bağlantıyı görmek için sağ üst köşedeki tıklamanız gerekir.Depending on how narrow your browser window is, you'll see the Student tab link in the top address bar or you'll have to click the upper right corner to see the link.

    Menü düğmesi

Veritabanı görünümüView the database

Öğrenciler sayfanın çalıştırdığınız ve uygulama veritabanına erişmeye EF olmadığını hiçbir veritabanı ve dağıtımd bulundu.When you ran the Students page and the application tried to access the database, EF discovered that there was no database and created one. EF sonra veritabanını verilerle doldurmak için seed yöntemi çalıştırdınız.EF then ran the seed method to populate the database with data.

Kullanabilirsiniz Sunucu Gezgini veya SQL Server Nesne Gezgini (SSOX Visual Studio'daki veritabanını görüntülemek için).You can use either Server Explorer or SQL Server Object Explorer (SSOX) to view the database in Visual Studio. Bu öğretici için kullanacağınız Sunucu Gezgini.For this tutorial, you'll use Server Explorer.

  1. Tarayıcıyı kapatın.Close the browser.

  2. İçinde Sunucu Gezgini, genişletin veri bağlantıları (gerekebilir yenile düğmesine ilk seçin), genişletin Okul bağlam (ContosoUniversity) ve ardından genişletin Tabloları yeni veritabanınızdaki tablolar görmek için.In Server Explorer, expand Data Connections (you may need to select the refresh button first), expand School Context (ContosoUniversity), and then expand Tables to see the tables in your new database.

  3. Sağ Öğrenci tıklayın ve tablo tablo verilerini Göster oluşturulan sütunları ve tabloya eklenen satırları görebilirsiniz.Right-click the Student table and click Show Table Data to see the columns that were created and the rows that were inserted into the table.

  4. Kapat Sunucu Gezgini bağlantı.Close the Server Explorer connection.

ContosoUniversity1.mdf ve .ldf veritabanı dosyalar, % USERPROFILE % klasör.The ContosoUniversity1.mdf and .ldf database files are in the %USERPROFILE% folder.

Kullanmakta olduğunuz çünkü DropCreateDatabaseIfModelChanges Başlatıcı artık bir değişiklik için Student sınıfı, uygulamayı yeniden çalıştırın ve veritabanı otomatik olarak değişikliğiniz eşleşecek şekilde yeniden oluşturulması.Because you're using the DropCreateDatabaseIfModelChanges initializer, you could now make a change to the Student class, run the application again, and the database would automatically be re-created to match your change. Örneğin, eklediğiniz bir EmailAddress özelliğini Student sınıf, Öğrenciler sayfayı yeniden çalıştırın ve ardından göz tablo yeniden, göreceksiniz yeni bir EmailAddress sütun.For example, if you add an EmailAddress property to the Student class, run the Students page again, and then look at the table again, you'll see a new EmailAddress column.

KurallarConventions

Sizin için tam bir veritabanı oluşturmak Entity Framework için sırayla yazmak için olan kod nedeniyle daha kısadır kuralları, veya Entity Framework yapan varsayımlar.The amount of code you had to write in order for Entity Framework to be able to create a complete database for you is minimal because of conventions, or assumptions that Entity Framework makes. Bunlardan bazıları zaten belirtildiği veya bunları farkında olmadan kullanıldı:Some of them have already been noted or were used without your being aware of them:

  • Varlık sınıfı adları pluralized formlar, tablo adları kullanılır.The pluralized forms of entity class names are used as table names.
  • Varlık özellik adlarını sütun adları için kullanılır.Entity property names are used for column names.
  • Adlandırılmış varlık özellikleri ID veya classname ID birincil anahtar özellik olarak tanınır.Entity properties that are named ID or classname ID are recognized as primary key properties.
  • Adlandırılmışsa, bu özellik bir yabancı anahtar özellik olarak yorumlanır <gezinme özelliği adı><birincil anahtar özelliği adı> (örneğin, StudentID içinStudent gezinti özelliği bu yana Student varlığın birincil anahtarı ID).A property is interpreted as a foreign key property if it's named <navigation property name><primary key property name> (for example, StudentID for the Student navigation property since the Student entity's primary key is ID). Yabancı anahtar özellikleri de adı aynı yalnızca <birincil anahtar özelliği adı> (örneğin, EnrollmentID beri Enrollment varlığın birincil anahtarı EnrollmentID).Foreign key properties can also be named the same simply <primary key property name> (for example, EnrollmentID since the Enrollment entity's primary key is EnrollmentID).

Kuralları geçersiz kılınabilir gördünüz.You've seen that conventions can be overridden. Örneğin, tablo adları olmamalıdır pluralized ve daha sonra göreceğiniz belirtilen nasıl açıkça bir özelliği bir yabancı anahtar özellik olarak işaretleyin.For example, you specified that table names shouldn't be pluralized, and you'll see later how to explicitly mark a property as a foreign key property.

Kodu almaGet the code

Projeyi yükleDownload Completed Project

Ek kaynaklarAdditional resources

EF 6 hakkında daha fazla bilgi için şu makalelere bakın:For more about EF 6, see these articles:

Sonraki adımlarNext steps

Bu öğreticide şunları yaptınız:In this tutorial, you:

  • Bir MVC web uygulaması oluşturulduCreated an MVC web app
  • Site stili AyarlaSet up the site style
  • Yüklü Entity Framework 6Installed Entity Framework 6
  • Veri modeli oluşturdukCreated the data model
  • Veritabanı bağlamı oluşturulduCreated the database context
  • Test verileri ile başlatılmış DBInitialized DB with test data
  • EF 6 ' Localdb'yi kullanmak üzere ayarlaSet up EF 6 to use LocalDB
  • Oluşturulan denetleyici ve GörünümCreated controller and views
  • Veritabanı görüntülenebilirViewed the database

Gözden geçirin ve oluşturma özelleştirme, okuma, güncelleştirme, silme (CRUD) kodda görünümleri ve denetleyicileri hakkında bilgi edinmek için sonraki makaleye ilerleyin.Advance to the next article to learn how to review and customize the create, read, update, delete (CRUD) code in your controllers and views.