TPT Devralmayı Tasarım Aracı

Bu adım adım kılavuz, Entity Framework Tasarım Aracı (EF Tasarım Aracı) kullanarak modelinizde tür başına tablo (TPT) devralmayı nasıl uygulayacaklarını gösterir. Tür başına tablo devralma, devralınmayan özelliklerin verilerini ve devralma hiyerarşisindeki her tür için anahtar özellikleri korumak için veritabanında ayrı bir tablo kullanır.

Bu kılavuzda, Kurs (temel tür), OnlineCourse (Kurstan türetilir) ve OnsiteCourse (Kurstan türetilir) varlıklarını aynı adlara sahip tablolarla eşleyeceğiz. Veritabanından bir model oluşturacak ve ardından TPT devralmayı uygulamak için modeli değiştireceğiz.

Ayrıca Önce Model ile başlayıp modelden veritabanı oluşturabilirsiniz. EF Tasarım Aracı varsayılan olarak TPT stratejisini kullanır ve bu nedenle modeldeki tüm devralmalar ayrı tablolara eşlenir.

Diğer Devralma Seçenekleri

Hiyerarşi Başına Tablo (TPH), bir devralma hiyerarşisindeki tüm varlık türlerinin verilerini korumak için bir veritabanı tablosunun kullanıldığı başka bir devralma türüdür.  Hiyerarşi başına Tablo devralmayı Varlık Tasarım Aracı eşleme hakkında bilgi için bkz. EF Tasarım Aracı TPH Devralma

Beton Başına Tablo Türü Devralma (TPC) ve karma devralma modellerinin Entity Framework çalışma zamanı tarafından desteklendiğini ancak EF Tasarım Aracı tarafından desteklenmediğini unutmayın. TPC veya karma devralma kullanmak istiyorsanız iki seçeneğiniz vardır: Önce Kod kullanma veya EDMX dosyasını el ile düzenleme. EDMX dosyasıyla çalışmayı seçerseniz, Eşleme Ayrıntıları Penceresi "güvenli moda" alınır ve eşlemeleri değiştirmek için tasarımcıyı kullanamazsınız.

Ön koşullar

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

Projeyi ayarlama

  • Visual Studio 2012'i açın.
  • Dosya-> Yeni -> Proje'yi seçin
  • Sol bölmede Visual C# öğesine tıklayın ve konsol şablonunu seçin.
  • Ad olarak TPTDBFirstSample girin.
  • Tamam'ı seçin.

Model Oluşturma

  • Çözüm Gezgini'da projeye sağ tıklayın ve Ekle -> Yeni Öğe'yi seçin.
  • 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 TPTModel.edmx yazın ve Ekle'ye tıklayın.
  • Model İçeriği Seç iletişim kutusunda** Veritabanından oluştur**'u seçin ve İ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 kutusundaki Tablolar düğümü altında Department, Course, OnlineCourse ve OnsiteCourse tablolarını seçin.
  • 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.

Tür Başına Tablo Devralmayı Uygulama

  • Tasarım yüzeyinde, OnlineCourse varlık türüne sağ tıklayın ve Özellikler'i seçin.
  • Özellikler penceresinde Temel Tür özelliğini Course olarak ayarlayın.
  • OnsiteCourse varlık türüne sağ tıklayın ve Özellikler'i seçin.
  • Özellikler penceresinde Temel Tür özelliğini Course olarak ayarlayın.
  • OnlineCourse ve Kurs varlık türleri arasındaki ilişkilendirmeye (satır) sağ tıklayın. Modelden Sil'i seçin.
  • OnsiteCourse ile Kurs varlık türleri arasındaki ilişkilendirmeye sağ tıklayın. Modelden Sil'i seçin.

Şimdi Bu sınıflar CourseID'yi Kurs temel türünden devraldığından, OnlineCourse ve OnsiteCourse'dan CourseID özelliğini sileceğiz.

  • OnlineCourse varlık türünün CourseID özelliğine sağ tıklayın ve modelden sil'i seçin.
  • OnsiteCourse varlık türünün CourseID özelliğine sağ tıklayın ve ardından Modelden Sil'i seçin
  • Tür başına tablo devralma işlemi artık uygulandı.

Table Per Type

Modeli Kullanma

Main yönteminin tanımlandığı Program.cs dosyasını açın. Aşağıdaki kodu Main işlevine yapıştırın. Kod üç sorgu yürütür. İlk sorgu, belirtilen bölümle ilgili tüm Kursları geri getirir. İkinci sorgu, belirtilen bölümle ilgili OnlineCourses'ı döndürmek için OfType yöntemini kullanır. Üçüncü sorgu OnsiteCourses döndürür.

    using (var context = new SchoolEntities())
    {
        foreach (var department in context.Departments)
        {
            Console.WriteLine("The {0} department has the following courses:",
                               department.Name);

            Console.WriteLine("   All courses");
            foreach (var course in department.Courses )
            {
                Console.WriteLine("     {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnlineCourse>())
            {
                Console.WriteLine("   Online - {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnsiteCourse>())
            {
                Console.WriteLine("   Onsite - {0}", course.Title);
            }
        }
    }