tablo bölmeyi Tasarım Aracı

Bu kılavuzda, Entity Framework Tasarım Aracı (EF Tasarım Aracı) ile bir modeli değiştirerek birden çok varlık türünün tek bir tabloyla nasıl eşleneceği gösterilmektedir.

Tablo bölmeyi kullanmak istemenizin nedenlerinden biri, nesnelerinizi yüklemek için gecikmeli yükleme kullanırken bazı özelliklerin yüklenmesini geciktirmektir. Çok büyük miktarda veri içerebilecek özellikleri ayrı bir varlığa ayırabilir ve yalnızca gerektiğinde yükleyebilirsiniz.

Aşağıdaki görüntüde EF Tasarım Aracı ile çalışırken kullanılan ana pencereler gösterilmektedir.

EF Designer

Ön koşullar

Bu kılavuzu tamamlamak için şunlara ihtiyacınız olacak:

Projeyi ayarlama

Bu kılavuzda Visual Studio 2012 kullanılır.

  • Visual Studio 2012'i açın.
  • Dosya menüsünde Yeni'nin üzerine gelin ve Proje'ye tıklayın.
  • Sol bölmede Visual C# öğesine tıklayın ve konsol uygulaması şablonunu seçin.
  • Projenin adı olarak TableSplittingSample yazın ve Tamam'a tıklayın.

School Database'i temel alan bir Model oluşturma

  • Çözüm Gezgini'da proje adına sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Öğe'ye tıklayın.
  • Soldaki menüden Veri'yi seçin ve ardından Şablonlar bölmesinde Varlık Veri Modeli'ni ADO.NET seçin.
  • Dosya adı olarak TableSplittingModel.edmx yazın ve Ekle'ye tıklayın.
  • Model İçeriği Seç iletişim kutusunda Veritabanından oluştur'u seçin ve ardından İleri'ye tıklayın.
  • Yeni Bağlan ion'a tıklayın. Bağlan ion Özellikleri iletişim kutusunda sunucu adını girin (örneğin, (localdb)\mssqllocaldb), kimlik doğrulama yöntemini seçin, veritabanı adı için School yazın ve Tamam'a tıklayın. Verilerinizi seçin Bağlan ion iletişim kutusu veritabanı bağlantı ayarınızla güncelleştirilir.
  • Veritabanı Nesnelerinizi Seçin iletişim kutusunda Tablolar düğümünü açın ve Kişi tablosunu işaretleyin. Bu, belirtilen tabloyu School modeline ekler.
  • Finish (Son) düğmesine tıklayın.

Modelinizi düzenlemek için bir tasarım yüzeyi sağlayan Entity Tasarım Aracı görüntülenir. Veritabanı Nesnelerinizi Seçin iletişim kutusunda seçtiğiniz tüm nesneler modele eklenir.

İki Varlığı Tek Bir Tabloya Eşleme

Bu bölümde, Kişi varlığını iki varlığa bölecek ve sonra bunları tek bir tabloya eşleyeceksiniz.

Dekont

Kişi varlığı, büyük miktarda veri içerebilecek özellikler içermez; yalnızca örnek olarak kullanılır.

  • Tasarım yüzeyinin boş bir alanına sağ tıklayın, Yeni Ekle'nin üzerine gelin ve Varlık'a tıklayın. Yeni Varlık iletişim kutusu görüntülenir.
  • Varlık adı için HireInfo ve Anahtar Özellik adı için PersonID yazın.
  • Tamam'a tıklayın.
  • Tasarım yüzeyinde yeni bir varlık türü oluşturulur ve görüntülenir.
  • Kişi varlık türünün HireDate özelliğini seçin ve Ctrl+X tuşlarına basın.
  • HireInfo varlığını seçin ve Ctrl+V tuşlarına basın.
  • Person ve HireInfo arasında bir ilişki oluşturun. Bunu yapmak için tasarım yüzeyinin boş bir alanına sağ tıklayın, Yeni Ekle'nin üzerine gelin ve İlişkilendirme'ye tıklayın.
  • İlişkilendirme Ekle iletişim kutusu görüntülenir. PersonHireInfo adı varsayılan olarak verilir.
  • İlişkinin her iki ucunda da çokluk 1(Bir) belirtin.
  • Tamam'a basın.

Sonraki adım Eşleme Ayrıntıları penceresini gerektirir. Bu pencereyi göremiyorsanız tasarım yüzeyine sağ tıklayın ve Eşleme Ayrıntıları'nı seçin.

  • HireInfo varlık türünü seçin ve Eşleme Ayrıntıları penceresinde Tablo veya Görünüm> Ekle'ye tıklayın<.

  • Tablo Ekle veya Görünüm> alanı açılan listesinden Kişi'yi<seçin. Listede, seçili varlığın eşlenebileceği tablolar veya görünümler bulunur. Uygun özellikler varsayılan olarak eşlenmelidir.

    Mapping Properties

  • Tasarım yüzeyinde PersonHireInfo ilişkilendirmesini seçin.

  • Tasarım yüzeyinde ilişkilendirmeye sağ tıklayın ve Özellikler'i seçin.

  • Özellikler penceresinde, Bilgi Kısıtlamaları özelliğini seçin ve üç nokta düğmesine tıklayın.

  • Sorumlu açılan listesinden Kişi'yi seçin.

  • Tamam'a basın.

 

Modeli Kullanma

  • Aşağıdaki kodu Main yöntemine yapıştırın.
    using (var context = new SchoolEntities())
    {
        Person person = new Person()
        {
            FirstName = "Kimberly",
            LastName = "Morgan",
            Discriminator = "Instructor",
        };

        person.HireInfo = new HireInfo()
        {
            HireDate = DateTime.Now
        };

        // Add the new person to the context.
        context.People.Add(person);

        // Insert a row into the Person table.  
        context.SaveChanges();

        // Execute a query against the Person table.
        // The query returns columns that map to the Person entity.
        var existingPerson = context.People.FirstOrDefault();

        // Execute a query against the Person table.
        // The query returns columns that map to the Instructor entity.
        var hireInfo = existingPerson.HireInfo;

        Console.WriteLine("{0} was hired on {1}",
            existingPerson.LastName, hireInfo.HireDate);
    }
  • Uygulamayı derleyin ve çalıştırın.

Aşağıdaki T-SQL deyimleri, bu uygulamanın çalıştırılmasının bir sonucu olarak School veritabanında yürütüldü

  • Bağlam yürütülürken aşağıdaki INSERT yürütüldü. SaveChanges() ve Person ve HireInfo varlıklarından verileri birleştirir

    Insert Combining Person and HireInfo Data

  • Context.Kişiler yürütülürken aşağıdaki SELECT yürütüldü. FirstOrDefault() ve yalnızca Kişi ile eşlenen sütunları seçer

    Select 1

  • Aşağıdaki SELECT , var olanPerson.Instructor gezinti özelliğine erişilirken yürütüldü ve yalnızca HireInfo ile eşlenen sütunları seçer

    Select 2