Veri Erişim Katmanını OluşturmaCreate the Data Access Layer

by Erik Reitanby Erik Reitan

Wingtip Toys örnek projesini indirin (C#) veya indirme E-kitabı (PDF)Download Wingtip Toys Sample Project (C#) or Download E-book (PDF)

Bu öğretici serisi, ASP.NET 4,5 ve Web için Microsoft Visual Studio Express 2013 kullanarak bir ASP.NET Web Forms uygulaması oluşturma hakkında temel bilgileri öğretir.This tutorial series will teach you the basics of building an ASP.NET Web Forms application using ASP.NET 4.5 and Microsoft Visual Studio Express 2013 for Web. Kaynak koduna sahip C# Visual Studio 2013 bir proje, bu öğretici serisine eşlik etmek için kullanılabilir.A Visual Studio 2013 project with C# source code is available to accompany this tutorial series.

Bu öğreticide, ASP.NET Web Forms ve Code First Entity Framework kullanarak bir veritabanında veri oluşturma, erişme ve gözden geçirme açıklanmaktadır.This tutorial describes how to create, access, and review data from a database using ASP.NET Web Forms and Entity Framework Code First. Bu öğretici, önceki öğreticide "Projeyi oluşturma" ve Wingtip oyuncak mağaza öğreticisi serisinin bir parçası olarak oluşturulur.This tutorial builds on the previous tutorial "Create the Project" and is part of the Wingtip Toy Store tutorial series. Bu öğreticiyi tamamladığınızda, projenin modeller klasöründe olan bir veri erişim sınıfları grubu oluşturacaksınız.When you've completed this tutorial, you will have built a group of data-access classes that are in the Models folder of the project.

Öğrenecekleriniz:What you'll learn:

  • Veri modellerini oluşturma.How to create the data models.
  • Veritabanını başlatma ve çekirdek oluşturma.How to initialize and seed the database.
  • Veritabanını desteklemek için uygulamayı güncelleştirme ve yapılandırma.How to update and configure the application to support the database.

Öğreticide sunulan özellikler şunlardır:These are the features introduced in the tutorial:

  • Entity Framework Code FirstEntity Framework Code First
  • Yerel veritabanıLocalDB
  • Veri AçıklamalarıData Annotations

Veri modellerini oluşturmaCreating the Data Models

Entity Framework , nesne ilişkisel eşleme (ORM) çerçevesidir.Entity Framework is an object-relational mapping (ORM) framework. Genellikle yazmanız gereken veri erişimi kodunun çoğunu ortadan kaldırarak, ilişkisel verilerle nesne olarak çalışmanıza olanak sağlar.It lets you work with relational data as objects, eliminating most of the data-access code that you'd usually need to write. Entity Framework kullanarak, LINQkullanarak sorgular verebilir, ardından verileri kesin olarak belirlenmiş nesneler olarak alabilir ve işleyebilirsiniz.Using Entity Framework, you can issue queries using LINQ, then retrieve and manipulate data as strongly typed objects. LINQ, verileri sorgulamak ve güncelleştirmek için desenler sağlar.LINQ provides patterns for querying and updating data. Entity Framework kullanmak, veri erişim temelleri üzerine odaklanmak yerine uygulamanızın geri kalanını oluşturmaya odaklanabilmenizi sağlar.Using Entity Framework allows you to focus on creating the rest of your application, rather than focusing on the data access fundamentals. Bu öğretici serisinde daha sonra, verileri nasıl kullanacağınızı, gezinti ve ürün sorgularını doldurmak için göstereceğiz.Later in this tutorial series, we'll show you how to use the data to populate navigation and product queries.

Entity Framework, Code Firstadlı bir geliştirme paradigmasını destekler.Entity Framework supports a development paradigm called Code First. Code First, sınıfları kullanarak veri modellerinizi tanımlamanıza olanak sağlar.Code First lets you define your data models using classes. Sınıf, diğer türlerin, yöntemlerin ve olayların değişkenlerini birlikte gruplandırarak kendi özel türlerinizi oluşturmanızı sağlayan bir yapıdır.A class is a construct that enables you to create your own custom types by grouping together variables of other types, methods and events. Sınıfları varolan bir veritabanıyla eşleyebilir veya bir veritabanı oluşturmak için kullanabilirsiniz.You can map classes to an existing database or use them to generate a database. Bu öğreticide, veri modeli sınıfları yazarak veri modellerini oluşturacaksınız.In this tutorial, you'll create the data models by writing data model classes. Daha sonra, bu yeni sınıflardan anında veritabanını Entity Framework oluşturmaya izin vereceksiniz.Then, you'll let Entity Framework create the database on the fly from these new classes.

Web Forms uygulaması için veri modellerini tanımlayan varlık sınıfları oluşturarak başlarsınız.You will begin by creating the entity classes that define the data models for the Web Forms application. Daha sonra varlık sınıflarını yöneten ve veritabanına veri erişimi sağlayan bir bağlam sınıfı oluşturacaksınız.Then you will create a context class that manages the entity classes and provides data access to the database. Ayrıca, veritabanını doldurmak için kullanacağınız bir başlatıcı sınıfı oluşturacaksınız.You will also create an initializer class that you will use to populate the database.

Entity Framework ve başvurularEntity Framework and References

Varsayılan olarak, Web Forms şablonunu kullanarak yeni bir ASP.NET Web uygulaması oluşturduğunuzda Entity Framework dahil edilir.By default, Entity Framework is included when you create a new ASP.NET Web Application using the Web Forms template. Entity Framework, bir NuGet paketi olarak yüklenebilir, kaldırılabilir ve güncelleştirilebilen olabilir.Entity Framework can be installed, uninstalled, and updated as a NuGet package.

Bu NuGet paketi, projenizde aşağıdaki çalışma zamanı derlemelerini içerir:This NuGet package includes the following runtime assemblies within your project:

  • EntityFramework. dll – Entity Framework tarafından kullanılan tüm ortak çalışma zamanı kodlarıEntityFramework.dll – All the common runtime code used by Entity Framework
  • EntityFramework. SqlServer. dll – Entity Framework için Microsoft SQL Server sağlayıcısıEntityFramework.SqlServer.dll – The Microsoft SQL Server provider for Entity Framework

Varlık sınıflarıEntity Classes

Verilerin şemasını tanımlamak için oluşturduğunuz sınıflar varlık sınıfları olarak adlandırılır.The classes you create to define the schema of the data are called entity classes. Veritabanı tasarımına yeni başladıysanız varlık sınıflarını bir veritabanının tablo tanımları olarak düşünün.If you're new to database design, think of the entity classes as table definitions of a database. Sınıftaki her bir özellik, veritabanının tablosundaki bir sütunu belirtir.Each property in the class specifies a column in the table of the database. Bu sınıflar, nesne odaklı kod ve veritabanının ilişkisel tablo yapısı arasında basit, nesne ilişkisel bir arabirim sağlar.These classes provide a lightweight, object-relational interface between object-oriented code and the relational table structure of the database.

Bu öğreticide, ürünler ve kategoriler için şemaları temsil eden basit varlık sınıfları ekleyerek başlayacaksınız.In this tutorial, you'll start out by adding simple entity classes representing the schemas for products and categories. Products sınıfı her ürün için tanımlar içerir.The products class will contain definitions for each product. Ürün sınıfının her üyesinin adı ProductID, ProductName, Description, ImagePath, UnitPrice, CategoryIDve Categoryolacaktır.The name of each of the members of the product class will be ProductID, ProductName, Description, ImagePath, UnitPrice, CategoryID, and Category. Kategori sınıfı, bir ürünün ait olduğu her bir kategorinin, otomobil, bot veya düzlem gibi tanımlar içerir.The category class will contain definitions for each category that a product can belong to, such as Car, Boat, or Plane. Kategori sınıfının her üyesinin adı CategoryID, CategoryName, Descriptionve Productsolacaktır.The name of each of the members of the category class will be CategoryID, CategoryName, Description, and Products. Her ürün kategorilerden birine ait olacaktır.Each product will belong to one of the categories. Bu varlık sınıfları projenin mevcut modeller klasörüne eklenecektir.These entity classes will be added to the project's existing Models folder.

  1. Çözüm Gezgini, modeller klasörüne sağ tıklayın ve ardından Yeni öğe> -Ekle ' yi seçin.In Solution Explorer, right-click the Models folder and then select Add -> New Item.

    Veri erişim katmanını oluşturma-yeni öğe menüsü

    Yeni öğe Ekle iletişim kutusu görüntülenir.The Add New Item dialog box is displayed.

  2. Soldaki yüklü bölmeden görsel C# ' ün altında kod' u seçin.Under Visual C# from the Installed pane on the left, select Code.

    Veri erişim katmanını oluşturma-yeni öğe menüsü

  3. Orta bölmeden sınıf ' ı seçin ve bu yeni sınıfı Product.csolarak adlandırın.Select Class from the middle pane and name this new class Product.cs.

  4. Ekle'yi tıklatın.Click Add.
    Yeni sınıf dosyası düzenleyicide görüntülenir.The new class file is displayed in the editor.

  5. Varsayılan kodu şu kodla değiştirin:Replace the default code with the following code:

    using System.ComponentModel.DataAnnotations;
    
    namespace WingtipToys.Models
    {
        public class Product
        {
            [ScaffoldColumn(false)]
            public int ProductID { get; set; }
    
            [Required, StringLength(100), Display(Name = "Name")]
            public string ProductName { get; set; }
    
            [Required, StringLength(10000), Display(Name = "Product Description"), DataType(DataType.MultilineText)]
            public string Description { get; set; }
    
            public string ImagePath { get; set; }
    
            [Display(Name = "Price")]
            public double? UnitPrice { get; set; }
    
            public int? CategoryID { get; set; }
    
            public virtual Category Category { get; set; }
        }
    }
    
  6. 1 ile 4 arasındaki adımları tekrarlayarak başka bir sınıf oluşturun, yeni sınıfı category.cs olarak adlandırın ve varsayılan kodu şu kodla değiştirin:Create another class by repeating steps 1 through 4, however, name the new class Category.cs and replace the default code with the following code:

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace WingtipToys.Models
    {
        public class Category
        {
            [ScaffoldColumn(false)]
            public int CategoryID { get; set; }
    
            [Required, StringLength(100), Display(Name = "Name")]
            public string CategoryName { get; set; }
    
            [Display(Name = "Product Description")]
            public string Description { get; set; }
    
            public virtual ICollection<Product> Products { get; set; }
        }
    }
    

Daha önce belirtildiği gibi, Category sınıfı uygulamanın satış için tasarlandığı ürün türünü temsil eder ( "otomobiller", "Boats", "Rockets"vb.) ve Product sınıfı veritabanındaki bireysel ürünleri (Toys) temsil eder.As previously mentioned, the Category class represents the type of product that the application is designed to sell (such as "Cars", "Boats", "Rockets", and so on), and the Product class represents the individual products (toys) in the database. Bir Product nesnesinin her örneği, ilişkisel veritabanı tablosundaki bir satıra karşılık gelir ve ürün sınıfının her özelliği ilişkisel veritabanı tablosundaki bir sütunla eşlenir.Each instance of a Product object will correspond to a row within a relational database table, and each property of the Product class will map to a column in the relational database table. Bu öğreticide daha sonra veritabanında bulunan ürün verilerini gözden geçireceğiz.Later in this tutorial, you'll review the product data contained in the database.

Veri AçıklamalarıData Annotations

Sınıfların belirli üyelerinin, [ScaffoldColumn(false)]gibi, üyeyle ilgili ayrıntıları belirten özniteliklere sahip olduğunu fark etmiş olabilirsiniz.You may have noticed that certain members of the classes have attributes specifying details about the member, such as [ScaffoldColumn(false)]. Bunlar veri ek açıklamalardır.These are data annotations. Veri ek açıklaması öznitelikleri, bu üye için Kullanıcı girişinin nasıl doğrulandığını tanımlayabilir, bu üyeye yönelik biçimlendirmeyi belirtebilir ve veritabanı oluşturulduğunda nasıl modellendirildiğini belirtebilir.The data annotation attributes can describe how to validate user input for that member, to specify formatting for it, and to specify how it is modeled when the database is created.

Bağlam SınıfıContext Class

Veri erişimi için sınıfları kullanmaya başlamak için bir bağlam sınıfı tanımlamanız gerekir.To start using the classes for data access, you must define a context class. Daha önce belirtildiği gibi, bağlam sınıfı varlık sınıflarını (Product sınıfı ve Category sınıfı) yönetir ve veritabanına veri erişimi sağlar.As mentioned previously, the context class manages the entity classes (such as the Product class and the Category class) and provides data access to the database.

Bu yordam modeller klasörüne yeni C# bir bağlam sınıfı ekler .This procedure adds a new C# context class to the Models folder.

  1. Modeller klasörüne sağ tıklayın ve ardından yeni öğe> -Ekle ' yi seçin.Right-click the Models folder and then select Add -> New Item.
    Yeni öğe Ekle iletişim kutusu görüntülenir.The Add New Item dialog box is displayed.

  2. Orta bölmeden sınıf ' ı seçin, ProductContext.cs olarak adlandırın ve Ekle' ye tıklayın.Select Class from the middle pane, name it ProductContext.cs and click Add.

  3. Sınıfında bulunan varsayılan kodu aşağıdaki kodla değiştirin:Replace the default code contained in the class with the following code:

    using System.Data.Entity;
    namespace WingtipToys.Models
    {
        public class ProductContext : DbContext
        {
            public ProductContext() : base("WingtipToys")
            {
            }
            public DbSet<Category> Categories { get; set; }
            public DbSet<Product> Products { get; set; }
        }
    }
    

Bu kod, kesin olarak belirlenmiş nesnelerle çalışarak verileri sorgulama, ekleme, güncelleştirme ve silme özelliğini içeren Entity Framework tüm çekirdek işlevlerine erişebilmeniz için System.Data.Entity ad alanını ekler.This code adds the System.Data.Entity namespace so that you have access to all the core functionality of Entity Framework, which includes the capability to query, insert, update, and delete data by working with strongly typed objects.

ProductContext sınıfı, veritabanında Product sınıf örneklerinin getirmeyi, depolanmasını ve güncelleştirilmesini işleyen Entity Framework ürün veritabanı bağlamını temsil eder.The ProductContext class represents Entity Framework product database context, which handles fetching, storing, and updating Product class instances in the database. ProductContext sınıfı Entity Framework tarafından sunulan DbContext taban sınıftan türetilir.The ProductContext class derives from the DbContext base class provided by Entity Framework.

Başlatıcı sınıfıInitializer Class

Bağlam ilk kez kullanıldığında veritabanını başlatmak için bazı özel mantık çalıştırmanız gerekir.You will need to run some custom logic to initialize the database the first time the context is used. Bu, ürünleri ve kategorileri hemen görüntüleyebilmeniz için çekirdek verilerin veritabanına eklenmesine izin verir.This will allow seed data to be added to the database so that you can immediately display products and categories.

Bu yordam modeller klasörüne yeni C# bir başlatıcı sınıfı ekler .This procedure adds a new C# initializer class to the Models folder.

  1. Modeller klasöründe başka bir Class oluşturun ve ProductDatabaseInitializer.csolarak adlandırın.Create another Class in the Models folder and name it ProductDatabaseInitializer.cs.

  2. Sınıfında bulunan varsayılan kodu aşağıdaki kodla değiştirin:Replace the default code contained in the class with the following code:

    using System.Collections.Generic;
    using System.Data.Entity;
    
    namespace WingtipToys.Models
    {
      public class ProductDatabaseInitializer : DropCreateDatabaseIfModelChanges<ProductContext>
      {
        protected override void Seed(ProductContext context)
        {
          GetCategories().ForEach(c => context.Categories.Add(c));
          GetProducts().ForEach(p => context.Products.Add(p));
        }
    
        private static List<Category> GetCategories()
        {
          var categories = new List<Category> {
                    new Category
                    {
                        CategoryID = 1,
                        CategoryName = "Cars"
                    },
                    new Category
                    {
                        CategoryID = 2,
                        CategoryName = "Planes"
                    },
                    new Category
                    {
                        CategoryID = 3,
                        CategoryName = "Trucks"
                    },
                    new Category
                    {
                        CategoryID = 4,
                        CategoryName = "Boats"
                    },
                    new Category
                    {
                        CategoryID = 5,
                        CategoryName = "Rockets"
                    },
                };
    
          return categories;
        }
    
        private static List<Product> GetProducts()
        {
          var products = new List<Product> {
                    new Product
                    {
                        ProductID = 1,
                        ProductName = "Convertible Car",
                        Description = "This convertible car is fast! The engine is powered by a neutrino based battery (not included)." + 
                                      "Power it up and let it go!", 
                        ImagePath="carconvert.png",
                        UnitPrice = 22.50,
                        CategoryID = 1
                   },
                    new Product 
                    {
                        ProductID = 2,
                        ProductName = "Old-time Car",
                        Description = "There's nothing old about this toy car, except it's looks. Compatible with other old toy cars.",
                        ImagePath="carearly.png",
                        UnitPrice = 15.95,
                         CategoryID = 1
                   },
                    new Product
                    {
                        ProductID = 3,
                        ProductName = "Fast Car",
                        Description = "Yes this car is fast, but it also floats in water.",
                        ImagePath="carfast.png",
                        UnitPrice = 32.99,
                        CategoryID = 1
                    },
                    new Product
                    {
                        ProductID = 4,
                        ProductName = "Super Fast Car",
                        Description = "Use this super fast car to entertain guests. Lights and doors work!",
                        ImagePath="carfaster.png",
                        UnitPrice = 8.95,
                        CategoryID = 1
                    },
                    new Product
                    {
                        ProductID = 5,
                        ProductName = "Old Style Racer",
                        Description = "This old style racer can fly (with user assistance). Gravity controls flight duration." + 
                                      "No batteries required.",
                        ImagePath="carracer.png",
                        UnitPrice = 34.95,
                        CategoryID = 1
                    },
                    new Product
                    {
                        ProductID = 6,
                        ProductName = "Ace Plane",
                        Description = "Authentic airplane toy. Features realistic color and details.",
                        ImagePath="planeace.png",
                        UnitPrice = 95.00,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 7,
                        ProductName = "Glider",
                        Description = "This fun glider is made from real balsa wood. Some assembly required.",
                        ImagePath="planeglider.png",
                        UnitPrice = 4.95,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 8,
                        ProductName = "Paper Plane",
                        Description = "This paper plane is like no other paper plane. Some folding required.",
                        ImagePath="planepaper.png",
                        UnitPrice = 2.95,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 9,
                        ProductName = "Propeller Plane",
                        Description = "Rubber band powered plane features two wheels.",
                        ImagePath="planeprop.png",
                        UnitPrice = 32.95,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 10,
                        ProductName = "Early Truck",
                        Description = "This toy truck has a real gas powered engine. Requires regular tune ups.",
                        ImagePath="truckearly.png",
                        UnitPrice = 15.00,
                        CategoryID = 3
                    },
                    new Product
                    {
                        ProductID = 11,
                        ProductName = "Fire Truck",
                        Description = "You will have endless fun with this one quarter sized fire truck.",
                        ImagePath="truckfire.png",
                        UnitPrice = 26.00,
                        CategoryID = 3
                    },
                    new Product
                    {
                        ProductID = 12,
                        ProductName = "Big Truck",
                        Description = "This fun toy truck can be used to tow other trucks that are not as big.",
                        ImagePath="truckbig.png",
                        UnitPrice = 29.00,
                        CategoryID = 3
                    },
                    new Product
                    {
                        ProductID = 13,
                        ProductName = "Big Ship",
                        Description = "Is it a boat or a ship. Let this floating vehicle decide by using its " + 
                                      "artifically intelligent computer brain!",
                        ImagePath="boatbig.png",
                        UnitPrice = 95.00,
                        CategoryID = 4
                    },
                    new Product
                    {
                        ProductID = 14,
                        ProductName = "Paper Boat",
                        Description = "Floating fun for all! This toy boat can be assembled in seconds. Floats for minutes!" + 
                                      "Some folding required.",
                        ImagePath="boatpaper.png",
                        UnitPrice = 4.95,
                        CategoryID = 4
                    },
                    new Product
                    {
                        ProductID = 15,
                        ProductName = "Sail Boat",
                        Description = "Put this fun toy sail boat in the water and let it go!",
                        ImagePath="boatsail.png",
                        UnitPrice = 42.95,
                        CategoryID = 4
                    },
                    new Product
                    {
                        ProductID = 16,
                        ProductName = "Rocket",
                        Description = "This fun rocket will travel up to a height of 200 feet.",
                        ImagePath="rocket.png",
                        UnitPrice = 122.95,
                        CategoryID = 5
                    }
                };
    
          return products;
        }
      }
    }
    

Yukarıdaki koddan görebileceğiniz gibi, veritabanı oluşturulup başlatıldığında Seed özelliği geçersiz kılınır ve ayarlanır.As you can see from the above code, when the database is created and initialized, the Seed property is overridden and set. Seed özelliği ayarlandığında, Kategoriler ve ürünlerdeki değerler veritabanını doldurmak için kullanılır.When the Seed property is set, the values from the categories and products are used to populate the database. Veritabanı oluşturulduktan sonra yukarıdaki kodu değiştirerek çekirdek verileri güncelleştirmeye çalışırsanız, Web uygulamasını çalıştırdığınızda hiçbir güncelleştirme görmezsiniz.If you attempt to update the seed data by modifying the above code after the database has been created, you won't see any updates when you run the Web application. Bu nedenle, yukarıdaki kod, çekirdek verileri sıfırlamadan önce modelin (şema) değişip değişmediğini tanımak için DropCreateDatabaseIfModelChanges sınıfının bir uygulamasını kullanır.The reason is the above code uses an implementation of the DropCreateDatabaseIfModelChanges class to recognize if the model (schema) has changed before resetting the seed data. Category ve Product varlık sınıflarında hiçbir değişiklik yapılmadığından, veritabanı çekirdek verilerle yeniden başlatılır.If no changes are made to the Category and Product entity classes, the database will not be reinitialized with the seed data.

Note

Uygulamayı her çalıştırışınızda veritabanının yeniden oluşturulmasını istediyseniz, DropCreateDatabaseIfModelChanges sınıfı yerine DropCreateDatabaseAlways sınıfını kullanabilirsiniz.If you wanted the database to be recreated every time you ran the application, you could use the DropCreateDatabaseAlways class instead of the DropCreateDatabaseIfModelChanges class. Bununla birlikte, bu öğretici serisi için DropCreateDatabaseIfModelChanges sınıfını kullanın.However for this tutorial series, use the DropCreateDatabaseIfModelChanges class.

Bu öğreticide, dört yeni sınıfa ve bir varsayılan sınıfa sahip bir modeller klasörünüze sahip olursunuz:At this point in this tutorial, you will have a Models folder with four new classes and one default class:

Veri erişim katmanı-modeller klasörünü oluşturma

Uygulamayı veri modelini kullanacak şekilde yapılandırmaConfiguring the Application to Use the Data Model

Artık verileri temsil eden sınıfları oluşturduğunuza göre, uygulamayı sınıfları kullanacak şekilde yapılandırmanız gerekir.Now that you've created the classes that represent the data, you must configure the application to use the classes. Global. asax dosyasında, modeli başlatan kodu eklersiniz.In the Global.asax file, you add code that initializes the model. Web. config dosyasında, uygulamanın yeni veri sınıfları tarafından temsil edilen verileri depolamak için hangi veritabanına kullanacağınızı belirten bilgileri eklersiniz.In the Web.config file you add information that tells the application what database you'll use to store the data that's represented by the new data classes. Global. asax dosyası, uygulama olaylarını veya yöntemlerini işlemek için kullanılabilir.The Global.asax file can be used to handle application events or methods. Web. config dosyası, ASP.NET Web uygulamanızın yapılandırmasını denetlemenize olanak tanır.The Web.config file allows you to control the configuration of your ASP.NET web application.

Global. asax dosyası güncelleştiriliyorUpdating the Global.asax file

Uygulama başlatıldığında veri modellerini başlatmak için, Global.asax.cs dosyasında Application_Start işleyicisini güncelleşolursunuz.To initialize the data models when the application starts, you will update the Application_Start handler in the Global.asax.cs file.

Note

Çözüm Gezgini, Global.asax.cs dosyasını düzenlemek için Global. asax dosyasını veya Global.asax.cs dosyasını seçebilirsiniz.In Solution Explorer, you can select either the Global.asax file or the Global.asax.cs file to edit the Global.asax.cs file.

  1. Global.asax.cs dosyasındaki Application_Start yöntemine sarıya vurgulanan aşağıdaki kodu ekleyin.Add the following code highlighted in yellow to the Application_Start method in the Global.asax.cs file.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Optimization;
    using System.Web.Routing;
    using System.Web.Security;
    using System.Web.SessionState;
    using System.Data.Entity;
    using WingtipToys.Models;
    
    namespace WingtipToys
    {
        public class Global : HttpApplication
        {
            void Application_Start(object sender, EventArgs e)
            {
                // Code that runs on application startup
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                // Initialize the product database.
                Database.SetInitializer(new ProductDatabaseInitializer());
            }
        }
    }
    

Note

Tarayıcınız, bu öğretici serisini bir tarayıcıda görüntülerken sarı renkle vurgulanmış kodu görüntülemek için HTML5 'yi desteklemelidir.Your browser must support HTML5 to view the code highlighted in yellow when viewing this tutorial series in a browser.

Yukarıdaki kodda gösterildiği gibi, uygulama başladığında, uygulama ilk kez veriye erişildiğinde çalıştırılacak başlatıcıyı belirtir.As shown in the above code, when the application starts, the application specifies the initializer that will run during the first time the data is accessed. Database nesnesine ve ProductDatabaseInitializer nesnesine erişmek için iki ek ad alanı gerekir.The two additional namespaces are required to access the Database object and the ProductDatabaseInitializer object.

Web. config dosyasını değiştirmeModifying the Web.Config File

Entity Framework Code First veritabanı çekirdek verilerle doldurulduğu zaman varsayılan bir konumda sizin için bir veritabanı oluşturacak olsa da, uygulamanıza kendi bağlantı bilgilerinizi eklemek, veritabanı konumunu denetlemenizi sağlar.Although Entity Framework Code First will generate a database for you in a default location when the database is populated with seed data, adding your own connection information to your application gives you control of the database location. Bu veritabanı bağlantısını, projenin kökündeki uygulamanın Web. config dosyasında bir bağlantı dizesi kullanarak belirtirsiniz.You specify this database connection using a connection string in the application's Web.config file at the root of the project. Yeni bir bağlantı dizesi ekleyerek veritabanının konumunu (wingtiptoys. mdf) varsayılan konumu yerine uygulamanın veri dizininde (App_verileri) oluşturulacak şekilde yönlendirebilirsiniz.By adding a new connection string, you can direct the location of the database (wingtiptoys.mdf) to be built in the application's data directory (App_Data), rather than its default location. Bu değişikliğin yapılması, bu öğreticide daha sonra veritabanı dosyasını bulmanıza ve incelemenize olanak sağlayacak.Making this change will allow you to find and inspect the database file later in this tutorial.

  1. Çözüm Gezgini, Web. config dosyasını bulun ve açın.In Solution Explorer, find and open the Web.config file.

  2. Sarı olarak vurgulanan bağlantı dizesini Web. config dosyasının <connectionStrings> bölümüne aşağıdaki gibi ekleyin:Add the connection string highlighted in yellow to the <connectionStrings> section of the Web.config file as follows:

    <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-WingtipToys-20131119102907.mdf;Initial Catalog=aspnet-WingtipToys-20131119102907;Integrated Security=True"
    providerName="System.Data.SqlClient" />
    <add name="WingtipToys"
    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\wingtiptoys.mdf;Integrated Security=True"
    providerName="System.Data.SqlClient" />
    </connectionStrings>
    

Uygulama ilk kez çalıştırıldığında, veritabanı bağlantı dizesi tarafından belirtilen konumda oluşturulur.When the application is run for the first time, it will build the database at the location specified by the connection string. Ancak uygulamayı çalıştırmadan önce, önce oluşturalım.But before running the application, let's build it first.

Uygulama OluşturmaBuilding the Application

Web uygulamanızdaki tüm sınıfların ve değişikliklerin çalıştığından emin olmak için uygulamayı derlemeniz gerekir.To make sure that all the classes and changes to your Web application work, you should build the application.

  1. Hata Ayıkla menüsünde, Build wingtiptoys' u seçin.From the Debug menu, select Build WingtipToys.
    Çıkış penceresi görüntülenir ve hepsi de varsa, başarılı bir ileti görürsünüz.The Output window is displayed, and if all went well, you see a succeeded message.

    Veri erişim katmanı çıkış pencerelerini oluşturma

Bir hata halinde çalıştırırsanız yukarıdaki adımları yeniden denetleyin.If you run into an error, re-check the above steps. Çıkış penceresindeki bilgiler, hangi dosyanın bir sorun olduğunu ve dosyada bir değişikliğin gerekli olduğunu gösterir.The information in the Output window will indicate which file has a problem and where in the file a change is required. Bu bilgiler, yukarıdaki adımların projenizde neleri gözden geçirilmesi ve düzeltilmesi gerektiğini belirlemenizi sağlar.This information will enable you to determine what part of the above steps need to be reviewed and fixed in your project.

ÖzetSummary

Serinin Bu öğreticide, veri modeli oluşturdunuz ve ayrıca veritabanını başlatmak ve temel almak için kullanılacak kodu eklediniz.In this tutorial of the series you have created the data model, as well as, added the code that will be used to initialize and seed the database. Uygulamayı, uygulama çalıştırıldığında veri modellerini kullanmak için de yapılandırdınız.You have also configured the application to use the data models when the application is run.

Sonraki öğreticide, Kullanıcı arabirimini güncelleştireceğiz, gezinti ekleyecek ve veritabanından veri alacaksınız.In the next tutorial, you'll update the UI, add navigation, and retrieve data from the database. Bu, veritabanının bu öğreticide oluşturduğunuz varlık sınıflarına göre otomatik olarak oluşturulmasını sağlayacaktır.This will result in the database being automatically created based on the entity classes that you created in this tutorial.

Ek KaynaklarAdditional Resources

Entity Framework genel bakış Entity Framework Overview
Başlangıç Kılavuzu, ADO.NET Entity Framework Beginner's Guide to the ADO.NET Entity Framework
Entity Framework Ile geliştirme Code First (video)Code First Development with Entity Framework (video)
Code First Ilişkiler AKıCı apı Code First Relationships Fluent API
Code First veri açıklamalarıCode First Data Annotations
Entity Framework için üretkenlik IyileştirmeleriProductivity Improvements for the Entity Framework