Bagikan melalui


Warisan TPT Desainer

Panduan langkah demi langkah ini menunjukkan cara menerapkan pewarisan tabel per jenis (TPT) dalam model Anda menggunakan Perancang Kerangka Kerja Entitas (Desainer EF). Pewarisan tabel per jenis menggunakan tabel terpisah dalam database untuk mempertahankan data properti dan properti kunci yang tidak diwariskan untuk setiap jenis dalam hierarki pewarisan.

Dalam panduan ini kami akan memetakan entitas Kursus (jenis dasar), OnlineCourse (berasal dari Kursus), dan OnsiteCourse (berasal dari Kursus) ke tabel dengan nama yang sama. Kita akan membuat model dari database lalu mengubah model untuk mengimplementasikan warisan TPT.

Anda juga dapat memulai dengan Model Pertama lalu menghasilkan database dari model. Desainer EF menggunakan strategi TPT secara default dan sehingga warisan apa pun dalam model akan dipetakan ke tabel terpisah.

Opsi Warisan Lainnya

Table-per-Hierarchy (TPH) adalah jenis warisan lain di mana satu tabel database digunakan untuk mempertahankan data untuk semua jenis entitas dalam hierarki pewarisan.  Untuk informasi tentang cara memetakan warisan Tabel per Hierarki dengan Perancang Entitas, lihat Warisan TPH Desainer EF. 

Perhatikan bahwa, model Warisan Jenis Tabel per Beton (TPC) dan pewarisan campuran didukung oleh runtime Kerangka Kerja Entitas tetapi tidak didukung oleh Desainer EF. Jika Anda ingin menggunakan TPC atau warisan campuran, Anda memiliki dua opsi: gunakan Kode Pertama, atau edit file EDMX secara manual. Jika Anda memilih untuk bekerja dengan file EDMX, Jendela Detail Pemetaan akan dimasukkan ke dalam "mode aman" dan Anda tidak akan dapat menggunakan perancang untuk mengubah pemetaan.

Prasyarat

Untuk menyelesaikan panduan ini, Anda memerlukan:

  • Versi terbaru Visual Studio.
  • Database sampel Sekolah.

Menyiapkan Proyek

  • Buka Visual Studio 2012.
  • Pilih File-> Baru -> Proyek
  • Di panel kiri, klik Visual C#, lalu pilih templat Konsol .
  • Masukkan TPTDBFirstSample sebagai nama.
  • PilihOK.

Buat model

  • Klik kanan proyek di Penjelajah Solusi, dan pilih Tambahkan -> Item Baru.
  • Pilih Data dari menu sebelah kiri lalu pilih ADO.NET Model Data Entitas di panel Templat.
  • Masukkan TPTModel.edmx untuk nama file, lalu klik Tambahkan.
  • Dalam kotak dialog Pilih Konten Model, pilih** Hasilkan dari database**, lalu klik Berikutnya.
  • Klik Koneksi baru. Dalam kotak dialog Properti Koneksi ion, masukkan nama server (misalnya, (localdb)\mssqllocaldb), pilih metode autentikasi, ketik Sekolah untuk nama database, lalu klik OK. Kotak dialog Pilih Koneksi si Data Anda diperbarui dengan pengaturan koneksi database Anda.
  • Dalam kotak dialog Pilih Objek Database Anda, di bawah simpul Tabel, pilih tabel Departemen, Kursus, OnlineCourse, dan OnsiteCourse .
  • Klik Selesai.

Perancang Entitas, yang menyediakan permukaan desain untuk mengedit model Anda, ditampilkan. Semua objek yang Anda pilih dalam kotak dialog Pilih Objek Database Anda ditambahkan ke model.

Menerapkan Warisan Tabel per Jenis

  • Pada permukaan desain, klik kanan jenis entitas OnlineCourse dan pilih Properti.
  • Di jendela Properti , atur properti Jenis Dasar ke Kursus.
  • Klik kanan jenis entitas OnsiteCourse dan pilih Properti.
  • Di jendela Properti , atur properti Jenis Dasar ke Kursus.
  • Klik kanan asosiasi (baris) antara jenis entitas OnlineCourse dan Course . Pilih Hapus dari Model.
  • Klik kanan kaitan antara jenis entitas OnsiteCourse dan Course . Pilih Hapus dari Model.

Kami sekarang akan menghapus properti CourseID dari OnlineCourse dan OnsiteCourse karena kelas-kelas ini mewarisi CourseID dari jenis dasar Kursus .

  • Klik kanan properti CourseID dari jenis entitas OnlineCourse, lalu pilih Hapus dari Model.
  • Klik kanan properti CourseID dari jenis entitas OnsiteCourse, lalu pilih Hapus dari Model
  • Warisan tabel per jenis sekarang diimplementasikan.

Table Per Type

Menggunakan Model

Buka file Program.cs tempat metode Utama ditentukan. Tempelkan kode berikut ke fungsi Utama . Kode menjalankan tiga kueri. Kueri pertama mengembalikan semua Kursus yang terkait dengan departemen yang ditentukan. Kueri kedua menggunakan metode OfType untuk mengembalikan OnlineCourses yang terkait dengan departemen yang ditentukan. Kueri ketiga mengembalikan OnsiteCourses.

    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);
            }
        }
    }