Aracılığıyla paylaş


Mevcut Veritabanına İlk Kod

Bu adım adım kılavuz, mevcut veritabanını hedefleyen Code First geliştirmesine giriş sağlar. Code First, C# veya VB.Net sınıflarını kullanarak modelinizi tanımlamanızı sağlar. İsteğe bağlı olarak ek yapılandırma, sınıflarınızdaki ve özelliklerinizdeki öznitelikler kullanılarak veya akıcı bir API kullanılarak gerçekleştirilebilir.

Önkoşullar

Bu kılavuzu tamamlamak için Visual Studio 2012 veya Visual Studio 2013 yüklü olmalıdır.

Visual Studio için Entity Framework Araçları'nın 6.1 (veya üzeri) sürümünün de yüklü olması gerekir. Entity Framework Araçları'nın en son sürümünü yükleme hakkında bilgi için bkz. Entity Framework'leri alma.

1. Mevcut Veritabanı Oluşturma

Genellikle mevcut bir veritabanını hedeflediğiniz zaman zaten oluşturulur, ancak bu kılavuzda erişmek için bir veritabanı oluşturmamız gerekir.

Şimdi veritabanını oluşturalım.

  • Visual Studio’yu açın

  • Görünüm -> Sunucu Gezgini

  • Veri Bağlan ions -> Bağlan Ekle... öğesine sağ tıklayın

  • Veri kaynağı olarak Microsoft SQL Server'ı seçmeniz gerekmeden önce Sunucu Gezgini'nden bir veritabanına bağlanmadıysanız

    Select Data Source

  • LocalDB örneğine Bağlan ve Veritabanı adı olarak blog oluşturma

    LocalDB Connection

  • Tamam'ı seçtiğinizde yeni veritabanı oluşturmak isteyip istemediğiniz sorulur ve Evet'i seçin

    Create Database Dialog

  • Yeni veritabanı artık Sunucu Gezgini'nde görünür, sağ tıklayın ve Yeni Sorgu'yu seçin

  • Aşağıdaki SQL'i yeni sorguya kopyalayın, ardından sorguya sağ tıklayın ve Yürüt'e tıklayın

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('The Visual Studio Blog', 'http://blogs.msdn.com/visualstudio/')

INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('.NET Framework Blog', 'http://blogs.msdn.com/dotnet/')

2. Uygulamayı Oluşturma

İşleri basit tutmak için, veri erişimini gerçekleştirmek için Önce Kod kullanan temel bir konsol uygulaması oluşturacağız:

  • Visual Studio’yu açın
  • Dosya -> Yeni -> Proje...
  • Sol menüden Ve Konsol Uygulaması'ndan Windows'ı seçin
  • Ad olarak CodeFirstExistingDatabaseSample girin
  • Tamam'ı seçin

 

3. Tersine Mühendislik Modeli

Visual Studio için Entity Framework Araçları'nı kullanarak veritabanına eşlemek üzere bazı ilk kodlar oluşturmamıza yardımcı olacağız. Bu araçlar yalnızca isterseniz el ile yazabileceğiniz kodlar oluşturur.

  • Proje -> Yeni Öğe Ekle...

  • Sol menüden Veri'yi seçin ve ardından Varlık Veri Modeli'ni ADO.NET

  • Ad olarak BloggingContext yazın ve Tamam'a tıklayın

  • Bu işlem Varlık Veri Modeli Sihirbazı'nı başlatır

  • Veritabanından Önce Kod'a tıklayın ve İleri'ye tıklayın

    Wizard One CFE

  • İlk bölümde oluşturduğunuz veritabanı bağlantısını seçin ve İleri'ye tıklayın

    Wizard Two CFE

  • Tüm tabloları içeri aktarmak için Tablolar'ın yanındaki onay kutusuna tıklayın ve Son'a tıklayın

    Wizard Three CFE

Tersine mühendislik işlemi tamamlandıktan sonra projeye bir dizi öğe eklenmiş olacak, şimdi de eklenen öğelere göz atalım.

Yapılandırma dosyası

Projeye bir App.config dosyası eklendi, bu dosya var olan veritabanına bağlantı dizesi içerir.

<connectionStrings>
  <add  
    name="BloggingContext"  
    connectionString="data source=(localdb)\mssqllocaldb;initial catalog=Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"  
    providerName="System.Data.SqlClient" />
</connectionStrings>

Yapılandırma dosyasındaki diğer bazı ayarları da fark edeceksiniz; bunlar Code First'e veritabanlarının nerede oluşturulacağını belirten varsayılan EF ayarlarıdır. Mevcut bir veritabanına eşlediğimiz için bu ayar uygulamamızda yoksayılır.

Türetilmiş Bağlam

Projeye bir BloggingContext sınıfı eklendi. Bağlam, verileri sorgulamamıza ve kaydetmemize olanak sağlayan veritabanı oturumunu temsil eder. Bağlam, modelimizdeki her tür için bir DbSet<TEntity> sunar. Varsayılan oluşturucunun name= söz dizimini kullanarak bir temel oluşturucuyu çağırdığını da fark edeceksiniz. Bu, Code First'a bu bağlam için kullanılacak bağlantı dizesi yapılandırma dosyasından yüklenmesi gerektiğini bildirir.

public partial class BloggingContext : DbContext
    {
        public BloggingContext()
            : base("name=BloggingContext")
        {
        }

        public virtual DbSet<Blog> Blogs { get; set; }
        public virtual DbSet<Post> Posts { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }
    }

Yapılandırma dosyasında bir bağlantı dizesi kullanırken her zaman name= söz dizimini kullanmalısınız. Bu, bağlantı dizesi yoksa Entity Framework'ün kurala göre yeni bir veritabanı oluşturmak yerine oluşturmasını sağlar.

Model sınıfları

Son olarak, projeye bir Blog ve Post sınıfı da eklendi. Bunlar, modelimizi oluşturan etki alanı sınıflarıdır. İlk Kod kurallarının mevcut veritabanının yapısıyla uyumlu olmadığı yapılandırmayı belirtmek için sınıflara uygulanan Veri Ek Açıklamaları'nı görürsünüz. Örneğin, veritabanında en fazla 200 uzunluğunda olduklarından Blog.Name ve Blog.Url'de StringLength ek açıklamasını görürsünüz (Code First varsayılanı, veritabanı sağlayıcısı tarafından desteklenen uzunluk üst sınırını (SQL Server'da nvarchar(max) kullanmaktır).

public partial class Blog
{
    public Blog()
    {
        Posts = new HashSet<Post>();
    }

    public int BlogId { get; set; }

    [StringLength(200)]
    public string Name { get; set; }

    [StringLength(200)]
    public string Url { get; set; }

    public virtual ICollection<Post> Posts { get; set; }
}

4. Veri Okuma ve Yazma

Artık bir modele sahip olduğumuza göre, bazı verilere erişmek için bu modeli kullanma zamanı geldi. Aşağıda gösterildiği gibi Program.cs dosyasında Main yöntemini uygulayın. Bu kod bağlamımızın yeni bir örneğini oluşturur ve ardından bunu kullanarak yeni bir Blog ekler. Ardından, veritabanındaki tüm Blogları Başlığa göre alfabetik olarak sıralanmış olarak almak için bir LINQ sorgusu kullanır.

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            var blog = new Blog { Name = name };
            db.Blogs.Add(blog);
            db.SaveChanges();

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

Artık uygulamayı çalıştırabilir ve test edebilirsiniz.

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
.NET Framework Blog
ADO.NET Blog
The Visual Studio Blog
Press any key to exit...

 

Veritabanım Değişirse Ne Olur?

Önce Koddan Veritabanına sihirbazı, daha sonra ince ayar yapıp değiştirebileceğiniz bir başlangıç noktası sınıf kümesi oluşturmak üzere tasarlanmıştır. Veritabanı şemanız değişirse sınıfları el ile düzenleyebilir veya sınıfların üzerine yazmak için başka bir tersine mühendislik işlemi gerçekleştirebilirsiniz.

Mevcut Veritabanına İlk Kod Geçişlerini Kullanma

Mevcut bir veritabanıyla Code First Migrations kullanmak istiyorsanız bkz . Mevcut bir veritabanına Kod İlk Geçişleri.

Özet

Bu kılavuzda mevcut bir veritabanını kullanarak Code First geliştirmesini inceledik. Visual Studio için Entity Framework Araçları'nı kullanarak veritabanına eşlenen ve verileri depolamak ve almak için kullanılabilen bir sınıf kümesine ters mühendislik yaptık.