LINQ to SQL ile Model Sınıfları Oluşturma (VB)Creating Model Classes with LINQ to SQL (VB)

Microsoft tarafındanby Microsoft

PDF’yi İndirDownload PDF

Bu öğreticinin amacı, ASP.NET bir MVC uygulaması için model sınıfları oluşturma yöntemini açıklamaktır.The goal of this tutorial is to explain one method of creating model classes for an ASP.NET MVC application. Bu eğitimde, Microsoft LINQ'dan SQL'e yararlanarak model sınıfları oluşturmayı ve veritabanı erişimi gerçekleştirmeyi öğrenirsiniz.In this tutorial, you learn how to build model classes and perform database access by taking advantage of Microsoft LINQ to SQL.

Bu öğreticinin amacı, ASP.NET bir MVC uygulaması için model sınıfları oluşturma yöntemini açıklamaktır.The goal of this tutorial is to explain one method of creating model classes for an ASP.NET MVC application. Bu eğitimde, Microsoft LINQ'dan SQL'e yararlanarak model sınıfları oluşturmayı ve veritabanı erişimi gerçekleştirmeyi öğrenirsiniz.In this tutorial, you learn how to build model classes and perform database access by taking advantage of Microsoft LINQ to SQL.

Bu öğreticide, temel bir Film veritabanı uygulaması oluşturuyoruz.In this tutorial, we build a basic Movie database application. Film veritabanı uygulamasını mümkün olan en hızlı ve en kolay şekilde oluşturarak başlıyoruz.We start by creating the Movie database application in the fastest and easiest way possible. Tüm veri erişimlerimizi doğrudan denetleyici eylemlerimizden gerçekleştiririz.We perform all of our data access directly from our controller actions.

Ardından, Depo desenini nasıl kullanacağınızı öğreneceksiniz.Next, you learn how to use the Repository pattern. Depo deseni kullanmak biraz daha fazla çalışma gerektirir.Using the Repository pattern requires a little more work. Ancak, bu deseni benimsemenin avantajı, değiştirilebilen ve kolayca sınanabilen uygulamalar oluşturmanıza olanak sağlamasıdır.However, the advantage of adopting this pattern is that it enables you to build applications that are adaptable to change and can be easily tested.

Model Sınıfı nedir?What is a Model Class?

Bir MVC modeli, MVC görünümünde veya MVC denetleyicisinde yer alan tüm uygulama mantığını içerir.An MVC model contains all of the application logic that is not contained in an MVC view or MVC controller. Özellikle, bir MVC modeli tüm uygulama iş ve veri erişim mantığı içerir.In particular, an MVC model contains all of your application business and data access logic.

Veri erişim mantığınızı uygulamak için çeşitli teknolojiler kullanabilirsiniz.You can use a variety of different technologies to implement your data access logic. Örneğin, Microsoft Entity Framework, NHibernate, Subsonic veya ADO.NET sınıflarını kullanarak veri erişim sınıflarınızı oluşturabilirsiniz.For example, you can build your data access classes using the Microsoft Entity Framework, NHibernate, Subsonic, or ADO.NET classes.

Bu öğreticide, veritabanını sorgulamak ve güncelleştirmek için LINQ'dan SQL'e kullanıyorum.In this tutorial, I use LINQ to SQL to query and update the database. LINQ'dan SQL'e microsoft SQL Server veritabanıile etkileşim kurmanın çok kolay bir yöntemini sağlar.LINQ to SQL provides you with a very easy method of interacting with a Microsoft SQL Server database. Ancak, ASP.NET MVC çerçevesinin linq'e sql'e herhangi bir şekilde bağlı olmadığını anlamak önemlidir.However, it is important to understand that the ASP.NET MVC framework is not tied to LINQ to SQL in any way. ASP.NET MVC herhangi bir veri erişim teknolojisi ile uyumludur.ASP.NET MVC is compatible with any data access technology.

Film Veritabanı OluşturmaCreate a Movie Database

Bu öğreticide -- model sınıflarını nasıl oluşturabileceğinizi göstermek için -- basit bir Film veritabanı uygulaması oluşturuyoruz.In this tutorial -- in order to illustrate how you can build model classes -- we build a simple Movie database application. İlk adım yeni bir veritabanı oluşturmaktır.The first step is to create a new database. Çözüm Gezgini_penceresindeki Uygulama Verileri klasörüne sağ tıklayın ve Ekle, Yeni Öğeseçeneğini seçin.Right-click the App_Data folder in the Solution Explorer window and select the menu option Add, New Item. SQL Server Veritabanı şablonu seçin, ona MoviesDB.mdf adını verin ve Ekle düğmesini tıklatın (Bkz. Şekil 1).Select the SQL Server Database template, give it the name MoviesDB.mdf, and click the Add button (see Figure 1).

Yeni bir SQL Server Veritabanı EklemeAdding a new SQL Server Database

Şekil 01: Yeni bir SQL Server Veritabanı Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayınız)Figure 01: Adding a new SQL Server Database (Click to view full-size image)

Yeni veritabanını oluşturduktan sonra, App_Data klasöründeki MoviesDB.mdf dosyasını çift tıklatarak veritabanını açabilirsiniz.After you create the new database, you can open the database by double-clicking the MoviesDB.mdf file in the App_Data folder. MoviesDB.mdf dosyasına çift tıklayarak Sunucu Gezgini penceresini açar (Bkz. Şekil 2).Double-clicking the MoviesDB.mdf file opens the Server Explorer window (see Figure 2).

Sunucu Gezgini penceresi, Visual Web Developer'ı kullanırken Veritabanı Gezgini penceresi olarak adlandırılır.The Server Explorer window is called the Database Explorer window when using Visual Web Developer.

Sunucu Gezgini penceresini kullanmaUsing the Server Explorer window

Şekil 02: Sunucu Gezgini penceresini kullanma (Tam boyutlu görüntüyü görüntülemek için tıklayınız)Figure 02: Using the Server Explorer window (Click to view full-size image)

Filmlerimizi temsil eden veritabanımıza bir tablo eklemeliyiz.We need to add one table to our database that represents our movies. Tablolar klasörüne sağ tıklayın ve menüseçeneğini yeni tablo ekle seçeneğini seçin.Right-click the Tables folder and select the menu option Add New Table. Bu menü seçeneğini seçmek tablo tasarımcısını açar (Bkz. Şekil 3).Selecting this menu option opens the Table Designer (see Figure 3).

Sunucu Gezgini penceresini kullanmaUsing the Server Explorer window

Şekil 03: Tablo Tasarımcısı (Tam boyutlu görüntüyü görüntülemek için tıklayınız)Figure 03: The Table Designer (Click to view full-size image)

Veritabanı tablomuza aşağıdaki sütunları eklememiz gerekir:We need to add the following columns to our database table:

Sütun AdıColumn Name Veri TürüData Type Nulls'a İzin VerAllow Nulls
KimlikId intInt FalseFalse
BaşlıkTitle Nvarchar(200)Nvarchar(200) FalseFalse
YönetmenDirector Nvarchar(50)Nvarchar(50) FalseFalse

Kimlik sütununa iki özel şey yapmanız gerekir.You need to do two special things to the Id column. İlk olarak, Tablo Tasarımcısı'ndaki sütunu seçip bir anahtarın simgesini tıklatarak Id sütununu birincil anahtar sütunu olarak işaretlemeniz gerekir.First, you need to mark the Id column as a primary key column by selecting the column in the Table Designer and clicking the icon of a key. LINQ'dan SQL'e, veritabanına karşı ekler veya güncelleştirmeler gerçekleştirirken birincil anahtar sütunlarınızı belirtmenizi gerektirir.LINQ to SQL requires you to specify your primary key columns when performing inserts or updates against the database.

Ardından, Evet değerini Is Identity özelliğine atayarak Kimlik sütununa Kimlik sütunu olarak işaretlemeniz gerekir (Bkz. Şekil 3).Next, you need to mark the Id column as an Identity column by assigning the value Yes to the Is Identity property (see Figure 3). Kimlik sütunu, tabloya yeni bir veri satırı eklediğinizde otomatik olarak yeni bir sayı atanan sütundur.An Identity column is a column that is assigned a new number automatically whenever you add a new row of data to a table.

Bu değişiklikleri yaptıktan sonra tabloyu tblMovie adıyla kaydedin.After you make these changes, save the table with the name tblMovie. Kaydet düğmesini tıklatarak tabloyu kaydedebilirsiniz.You can save the table by clicking the Save button.

SQL Sınıflarına LINQ oluşturmaCreate LINQ to SQL Classes

MVC modelimiz, tblMovie veritabanı tablosunu temsil eden LINQ-SQL sınıflarını içerir.Our MVC model will contain LINQ to SQL classes that represent the tblMovie database table. Bu LINQ'dan SQL sınıflarına doğru oluşturmanın en kolay yolu Modeller klasörüne sağ tıklamak, Ekle, Yeni Öğe'yiseçmek, LINQ'dan SQL Sınıflara şablonu seçmek, sınıflara Movie.dbml adını vermek ve Ekle düğmesini tıklamaktır (Şekil 4'e bakın).The easiest way to create these LINQ to SQL classes is to right-click the Models folder, select Add, New Item, select the LINQ to SQL Classes template, give the classes the name Movie.dbml, and click the Add button (see Figure 4).

SQL sınıflarına LINQ oluşturmaCreating LINQ to SQL classes

Şekil 04: SQL sınıflarına LINQ oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayınız)Figure 04: Creating LINQ to SQL classes (Click to view full-size image)

Movie LINQ to SQL Classes'ı oluşturduktan hemen sonra Object Relational Designer görüntülenir.Immediately after you create the Movie LINQ to SQL Classes, the Object Relational Designer appears. Belirli veritabanı tablolarını temsil eden SQL Sınıfları IÇIN LINQ oluşturmak için Veritabanı tablolarını Sunucu Gezgini penceresinden Object İlişkisel Tasarımcı'ya sürükleyebilirsiniz.You can drag database tables from the Server Explorer window onto the Object Relational Designer to create LINQ to SQL Classes that represent particular database tables. TblMovie veritabanı tablosunu Object İlişkisel Tasarımcı'ya eklememiz gerekir (bkz. Şekil 4).We need to add the tblMovie database table onto the Object Relational Designer (see Figure 4).

Nesne İlişkisel Tasarımcıyı KullanmaUsing the Object Relational Designer

Şekil 05: Nesne İlişkisel Tasarımcısı nı Kullanma (Tam boyutlu görüntüyü görüntülemek için tıklayınız)Figure 05: Using the Object Relational Designer (Click to view full-size image)

Varsayılan olarak, Nesne İlişkisel Tasarımcısı, Tasarımcı'ya sürüklediğiniz veritabanı tablosuyla aynı ada sahip bir sınıf oluşturur.By default, the Object Relational Designer creates a class with the very same name as the database table that you drag onto the Designer. Ancak, bizim sınıf tblMovie aramak istemiyorum.However, we don't want to call our class tblMovie. Bu nedenle, Tasarımcı'daki sınıfın adını tıklatın ve sınıfın adını Film olarak değiştirin.Therefore, click the name of the class in the Designer and change the name of the class to Movie.

Son olarak, LINQ'yi SQL Sınıflarına kaydetmek için Kaydet düğmesini (disketin resmi) tıklatmayı unutmayın.Finally, remember to click the Save button (the picture of the floppy) to save the LINQ to SQL Classes. Aksi takdirde, LINQ to SQL Sınıfları Object İlişkisel Tasarımcı tarafından oluşturulamaz.Otherwise, the LINQ to SQL Classes won't be generated by the Object Relational Designer.

Denetleyici Eyleminde LINQ'dan SQL'e KULLANMAUsing LINQ to SQL in a Controller Action

Artık LINQ'dan SQL'e sınıflarımız olduğuna göre, veritabanından veri almak için bu sınıfları kullanabiliriz.Now that we have our LINQ to SQL classes, we can use these classes to retrieve data from the database. Bu bölümde, doğrudan bir denetleyici eylem içinde SQL sınıfları LINQ nasıl kullanılacağını öğrenirler.In this section, you learn how to use LINQ to SQL classes directly within a controller action. TBLMovies veritabanı tablosundaki filmlerin listesini MVC görünümünde görüntüleyeceğiz.We'll display the list of movies from the tblMovies database table in an MVC view.

İlk olarak, HomeController sınıfını değiştirmemiz gerekiyor.First, we need to modify the HomeController class. Bu sınıf, uygulamanızın Denetleyicileri klasöründe bulunabilir.This class can be found in the Controllers folder of your application. Liste 1'deki sınıfa benzeyerek sınıfı değiştirin.Modify the class so it looks like the class in Listing 1.

İlan 1 –Controllers\HomeController.vbListing 1 – Controllers\HomeController.vb

<HandleError()> _
Public Class HomeController

     Inherits System.Web.Mvc.Controller

     Function Index()
          Dim dataContext As New MovieDataContext()
          Dim movies = From m In dataContext.Movies _
               Select m
          return View(movies)
     End Function
End Class

Listeleme 1'deki Index() eylemi, MoviesDB veritabanını temsil etmek için BIR LINQ'dan SQL DataContext sınıfına (MovieDataContext) kullanır.The Index() action in Listing 1 uses a LINQ to SQL DataContext class (the MovieDataContext) to represent the MoviesDB database. MoveDataContext sınıfı Visual Studio Object İlişkisel Tasarımcısı tarafından oluşturuldu.The MoveDataContext class was generated by the Visual Studio Object Relational Designer.

TblMovies veritabanı tablosundan tüm filmleri almak için DataContext'a karşı bir LINQ sorgusu gerçekleştirilir.A LINQ query is performed against the DataContext to retrieve all of the movies from the tblMovies database table. Film listesi, filmler adlı yerel bir değişkene atanır.The list of movies is assigned to a local variable named movies. Son olarak, film listesi görünüm verileri aracılığıyla görünüme aktarılır.Finally, the list of movies is passed to the view through view data.

Filmleri göstermek için, bir sonraki Dizin görünümünü değiştirmemiz gerekir.In order to show the movies, we next need to modify the Index view. Dizin görünümünü Görünümler\Ana Sayfa\ klasöründe bulabilirsiniz.You can find the Index view in the Views\Home\ folder. Liste 2'deki görünüme benzer şekilde Dizin görünümünü güncelleştirin.Update the Index view so that it looks like the view in Listing 2.

Listeleme 2 –Views\Home\Index.aspxListing 2 – Views\Home\Index.aspx

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="false" CodeBehind="Index.aspx.vb" Inherits="MvcApplication1.Index" %>
<%@ Import Namespace="MvcApplication1" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">

<ul>
<%  For Each m As Movie In ViewData.Model%>
    <li><%= m.Title %></li>
<% Next%>
</ul>
</asp:Content>

Değiştirilen Dizin görünümünün <görünümün üst kısmında> %@ alma ad alanı % yönergesi içerdiğine dikkat edin.Notice that the modified Index view includes an <%@ import namespace %> directive at the top of the view. Bu yönerge MvcApplication1 ad alanını içeri iter.This directive imports the MvcApplication1 namespace. Görünümdeki model sınıflarıyla - özellikle de Film sınıfıyla - çalışabilmek için bu ad alanına ihtiyacımız var.We need this namespace in order to work with the model classes – in particular, the Movie class -- in the view.

Listeleme 2'deki görünüm, ViewData.Model özelliği tarafından temsil edilen tüm öğeler arasında yineleyen her döngü için bir döngü içerir.The view in Listing 2 contains a For Each loop that iterates through all of the items represented by the ViewData.Model property. Başlık özelliğinin değeri her film için görüntülenir.The value of the Title property is displayed for each movie.

ViewData.Model özelliğinin değerinin bir Tanımlanabilir'a attırılabildiğini unutmayın.Notice that the value of the ViewData.Model property is cast to an IEnumerable. Bu, ViewData.Model'in içeriğini gözden geçirmek için gereklidir.This is necessary in order to loop through the contents of ViewData.Model. Burada başka bir seçenek güçlü bir şekilde yazılmış bir görünüm oluşturmaktır.Another option here is to create a strongly-typed view. Güçlü bir şekilde yazılan bir görünüm oluşturduğunuzda, ViewData.Model özelliğini görünümün kod arkası sınıfındaki belirli bir türe atarsınız.When you create a strongly-typed view, you cast the ViewData.Model property to a particular type in a view's code-behind class.

HomeController sınıfını ve Dizin görünümünü değiştirdikten sonra uygulamayı çalıştırırsanız, boş bir sayfa alırsınız.If you run the application after modifying the HomeController class and the Index view then you will get a blank page. tblMovies veritabanı tablosunda film kaydı olmadığından boş bir sayfa alırsınız.You'll get a blank page because there are no movie records in the tblMovies database table.

tblMovies veritabanı tablosuna kayıt eklemek için Server Explorer penceresindeki tblMovies veritabanı tablosuna sağ tıklayın (Visual Web Developer'da Veritabanı Gezgini penceresi) ve Tablo Verilerini Göstermenü seçeneğini seçin.In order to add records to the tblMovies database table, right-click the tblMovies database table in the Server Explorer window (Database Explorer window in Visual Web Developer) and select the menu option Show Table Data. Görünen ızgarayı kullanarak film kayıtlarını ekleyebilirsiniz (Bkz. Şekil 5).You can insert movie records by using the grid that appears (see Figure 5).

Film eklemeInserting movies

Şekil 06: Film ekleme(Tam boyutlu görüntüyü görüntülemek için tıklayınız)Figure 06: Inserting movies(Click to view full-size image)

TBLMovies tablosuna bazı veritabanı kayıtları ekledikten ve uygulamayı çalıştırdıktan sonra, sayfayı Şekil 7'de görürsünüz.After you add some database records to the tblMovies table, and you run the application, you'll see the page in Figure 7. Tüm film veritabanı kayıtları madde işaretli listede görüntülenir.All of the movie database records are displayed in a bulleted list.

Dizin görünümüyle film görüntülemeDisplaying movies with the Index view

Şekil 07: Dizin görünümünde film görüntüleme(Tam boyutlu görüntüyü görüntülemek için tıklayınız)Figure 07: Displaying movies with the Index view(Click to view full-size image)

Depo Deseni KullanmaUsing the Repository Pattern

Önceki bölümde, doğrudan bir denetleyici eylem içinde SQL sınıfları LINQ kullanılır.In the previous section, we used LINQ to SQL classes directly within a controller action. MovieDataContext sınıfını doğrudan Index() denetleyici eyleminden kullandık.We used the MovieDataContext class directly from the Index() controller action. Basit bir uygulama durumunda bunu yapmanın yanlış bir şey yoktur.There is nothing wrong with doing this in the case of a simple application. Ancak, denetleyici sınıfında doğrudan LINQ'dan SQL'e çalışmak, daha karmaşık bir uygulama oluşturmanız gerektiğinde sorunlar oluşturur.However, working directly with LINQ to SQL in a controller class creates problems when you need to build a more complex application.

Bir denetleyici sınıfı içinde LINQ'dan SQL'e kullanmak, gelecekte veri erişim teknolojilerinde geçiş yapmayı zorlaştırır.Using LINQ to SQL within a controller class makes it difficult to switch data access technologies in the future. Örneğin, Microsoft LINQ'yi kullanmaktan SQL'e, veri erişim teknolojiniz olarak Microsoft Entity Framework'e geçmeye karar verebilirsiniz.For example, you might decide to switch from using Microsoft LINQ to SQL to using the Microsoft Entity Framework as your data access technology. Bu durumda, uygulamanızdaki veritabanına erişen tüm denetleyicileri yeniden yazmanız gerekir.In that case, you would need to rewrite every controller that accesses the database within your application.

Denetleyici sınıfı içinde LINQ'dan SQL'e kullanmak, uygulamanız için birim testleri oluşturmayı da zorlaştırır.Using LINQ to SQL within a controller class also makes it difficult to build unit tests for your application. Normalde, birim testleri gerçekleştirirken bir veritabanı ile etkileşim kurmak istemiyorum.Normally, you do not want to interact with a database when performing unit tests. Veritabanı sunucunuzu değil, uygulama mantığınızı sınamak için birim testlerinizi kullanmak istiyorsunuz.You want to use your unit tests to test your application logic and not your database server.

Gelecekteki değişime daha uygun ve daha kolay sınanabilecek bir MVC uygulaması oluşturmak için Depo deseni kullanmayı düşünmelisiniz.In order to build an MVC application that is more adaptable to future change and that can be more easily tested, you should consider using the Repository pattern. Depo deseni kullandığınızda, tüm veritabanı erişim mantığınızı içeren ayrı bir depo sınıfı oluşturursunuz.When you use the Repository pattern, you create a separate repository class that contains all of your database access logic.

Depo sınıfını oluşturduğunuzda, depo sınıfı tarafından kullanılan tüm yöntemleri temsil eden bir arabirim oluşturursunuz.When you create the repository class, you create an interface that represents all of the methods used by the repository class. Denetleyicilerinizde, kodunuzu depo yerine arabiriyine yazarsınız.Within your controllers, you write your code against the interface instead of the repository. Bu şekilde, gelecekte farklı veri erişim teknolojilerini kullanarak depoyu uygulayabilirsiniz.That way, you can implement the repository using different data access technologies in the future.

Listeleme 3'teki arabirim iMovieRepository olarak adlandırılır ve ListAll() adlı tek bir yöntemi temsil eder.The interface in Listing 3 is named IMovieRepository and it represents a single method named ListAll().

İlan 3 –Models\IMovieRepository.vbListing 3 – Models\IMovieRepository.vb

Public Interface IMovieRepository
     Function ListAll() As IList(Of Movie)
End Interface

Listeleme 4'teki depo sınıfı IMovieRepository arabirimini uygular.The repository class in Listing 4 implements the IMovieRepository interface. IMovieRepozitory arabiriminin gerektirdiği yönteme karşılık gelen ListAll() adlı bir yöntem içerdiğine dikkat edin.Notice that it contains a method named ListAll() that corresponds to the method required by the IMovieRepository interface.

İlan 4 –Models\MovieRepository.vbListing 4 – Models\MovieRepository.vb

Public Class MovieRepository Implements IMovieRepository
         Private _dataContext As MovieDataContext

         Public Sub New()
              _dataContext = New MovieDataContext()
         End Sub

         Public Function ListAll() As IList(Of Movie) Implements IMovieRepository.ListAll
              Dim movies = From m In _dataContext.Movies _
                   Select m
              Return movies.ToList()
         End Function
End Class

Son olarak, Listeleme 5'teki MoviesController sınıfı Depo deseni kullanır.Finally, the MoviesController class in Listing 5 uses the Repository pattern. Artık DOĞRUDAN SQL sınıfları IÇIN LINQ kullanır.It no longer uses LINQ to SQL classes directly.

İlan 5 –Controllers\MoviesController.vbListing 5 – Controllers\MoviesController.vb

using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    Public Class MoviesController 
        Inherits System.Web.Mvc.Controller

             Private _repository As IMovieRepository

             Sub New()
                  Me.New(New MovieRepository())
             End Sub

             Sub New(ByVal repository As IMovieRepository)
                  _repository = repository
             End Sub

             Function Index()
                  Return View(_repository.ListAll())
             End Function
    End Class
}

Listeleme 5'teki MoviesController sınıfının iki oluşturucusu olduğuna dikkat edin.Notice that the MoviesController class in Listing 5 has two constructors. Uygulamanız çalışırken ilk oluşturucu, parametresiz oluşturucu çağrılır.The first constructor, the parameterless constructor, is called when your application is running. Bu oluşturucu MovieRepository sınıfının bir örneğini oluşturur ve ikinci oluşturucuya geçirir.This constructor creates an instance of the MovieRepository class and passes it to the second constructor.

İkinci oluşturucunun tek bir parametresi vardır: IMovieRepozituar parametresi.The second constructor has a single parameter: an IMovieRepository parameter. Bu oluşturucu, parametrenin değerini depo adlı _sınıf düzeyindeki bir alana atar.This constructor simply assigns the value of the parameter to a class-level field named _repository.

MoviesController sınıfı Bağımlılık Enjeksiyonde desen adı verilen bir yazılım tasarım deseninden yararlanarak yararlansağlamaktadır.The MoviesController class is taking advantage of a software design pattern called the Dependency Injection pattern. Özellikle, Yapıcı Bağımlılık Enjeksiyon denilen bir şey kullanıyor.In particular, it is using something called Constructor Dependency Injection. Martin Fowler tarafından aşağıdaki makaleyi okuyarak bu desen hakkında daha fazla bilgi edinebilirsiniz:You can read more about this pattern by reading the following article by Martin Fowler:

http://martinfowler.com/articles/injection.html

MoviesController sınıfındaki tüm kodun (ilk oluşturucu hariç) gerçek MovieRepository sınıfı yerine IMovieRepository arabirimi yle etkileşime geçtiğine dikkat edin.Notice that all of the code in the MoviesController class (with the exception of the first constructor) interacts with the IMovieRepository interface instead of the actual MovieRepository class. Kod, arabirimin somut bir uygulaması yerine soyut bir arabirimle etkileşime girer.The code interacts with an abstract interface instead of a concrete implementation of the interface.

Uygulama tarafından kullanılan veri erişim teknolojisini değiştirmek istiyorsanız, iMovieRepozitory arabirimini alternatif veritabanı erişim teknolojisini kullanan bir sınıfla uygulayabilirsiniz.If you want to modify the data access technology used by the application then you can simply implement the IMovieRepository interface with a class that uses the alternative database access technology. Örneğin, bir EntityFrameworkMovieRepository sınıfı veya SubSonicMovieRepository sınıfı oluşturabilirsiniz.For example, you could create an EntityFrameworkMovieRepository class or a SubSonicMovieRepository class. Denetleyici sınıfı arabirime göre programlandığı için, iMovieRepository'nin yeni bir uygulamasını denetleyici sınıfına geçirebilirsiniz ve sınıf çalışmaya devam eder.Because the controller class is programmed against the interface, you can pass a new implementation of IMovieRepository to the controller class and the class would continue to work.

Ayrıca, MoviesController sınıfını test etmek istiyorsanız, sahte film deposu sınıfını MoviesController'a geçebilirsiniz.Furthermore, if you want to test the MoviesController class, then you can pass a fake movie repository class to the MoviesController. IMovieRepository sınıfını veritabanına gerçekten erişmeyen ancak iMovieRepository arabiriminin gerekli tüm yöntemlerini içeren bir sınıfla uygulayabilirsiniz.You can implement the IMovieRepository class with a class that does not actually access the database but contains all of the required methods of the IMovieRepository interface. Bu şekilde, gerçek bir veritabanına erişmeden MoviesController sınıfını birleştirebilirsiniz.That way, you can unit test the MoviesController class without actually accessing a real database.

ÖzetSummary

Bu öğreticinin amacı, Microsoft LINQ'dan SQL'e yararlanarak MVC model sınıflarını nasıl oluşturabileceğinizi göstermekti.The goal of this tutorial was to demonstrate how you can create MVC model classes by taking advantage of Microsoft LINQ to SQL. Veritabanı verilerini ASP.NET bir MVC uygulamasında görüntülemek için iki stratejiyi inceledik.We examined two strategies for displaying database data in an ASP.NET MVC application. İlk olarak, LINQ'dan SQL sınıflarına oluşturduk ve sınıfları doğrudan bir denetleyici eylemi içinde kullandık.First, we created LINQ to SQL classes and used the classes directly within a controller action. Bir denetleyici içinde LINQ'dan SQL sınıflarına doğru kullanmak, veritabanı verilerini bir MVC uygulamasında hızlı ve kolay bir şekilde görüntülemenizi sağlar.Using LINQ to SQL classes within a controller enables you to quickly and easily display database data in an MVC application.

Sonra, veritabanı verilerini görüntülemek için biraz daha zor, ama kesinlikle daha erdemli bir yol araştırdık.Next, we explored a slightly more difficult, but definitely more virtuous, path for displaying database data. Depo deseninden yararlandık ve tüm veritabanı erişim mantığımızı ayrı bir depo sınıfına yerleştirdik.We took advantage of the Repository pattern and placed all of our database access logic in a separate repository class. Denetleyicimizde, tüm kodlarımızı somut bir sınıf yerine bir arayüze karşı yazdık.In our controller, we wrote all of our code against an interface instead of a concrete class. Depo deseninin avantajı, gelecekte veritabanı erişim teknolojilerini kolayca değiştirmemizi ve denetleyici sınıflarımızı kolayca test etmemizi sağlamasıdır.The advantage of the Repository pattern is that it enables us to easily change database access technologies in the future and it enables us to easily test our controller classes.