Bagikan melalui


Warisan TPH Desainer

Panduan langkah demi langkah ini menunjukkan cara menerapkan warisan table-per-hierarchy (TPH) dalam model konseptual Anda dengan Entity Framework Designer (EF Designer). Pewarisan TPH menggunakan satu tabel database untuk mempertahankan data untuk semua jenis entitas dalam hierarki pewarisan.

Dalam panduan ini kita akan memetakan tabel Orang ke tiga jenis entitas: Orang (jenis dasar), Siswa (berasal dari Orang), dan Instruktur (berasal dari Orang). Kita akan membuat model konseptual dari database (Database First) lalu mengubah model untuk mengimplementasikan pewarisan TPH menggunakan Desainer EF.

Dimungkinkan untuk memetakan ke warisan TPH menggunakan Model First tetapi Anda harus menulis alur kerja pembuatan database Anda sendiri yang kompleks. Anda kemudian akan menetapkan alur kerja ini ke properti Alur Kerja Pembuatan Database di Desainer EF. Alternatif yang lebih mudah adalah menggunakan Code First.

Opsi Warisan Lainnya

Tabel per Jenis (TPT) adalah jenis warisan lain di mana tabel terpisah dalam database dipetakan ke entitas yang berpartisipasi dalam pewarisan.  Untuk informasi tentang cara memetakan warisan Tabel per Jenis dengan Desainer EF, lihat Warisan TPT Desainer EF.

Model Warisan Tipe 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 TPHDBFirstSample sebagai nama.
  • PilihOK.

Buat model

  • Klik kanan nama 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 TPHModel.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 Orang .
  • 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.

Begitulah tampilan tabel Orang dalam database.

Person Table 

Menerapkan Warisan Tabel per Hierarki

Tabel Orang memiliki kolom Diskriminator , yang dapat memiliki salah satu dari dua nilai: "Siswa" dan "Instruktur". Bergantung pada nilai tabel Orang akan dipetakan ke entitas Siswa atau entitas Instruktur . Tabel Orang juga memiliki dua kolom, HireDate dan EnrollmentDate, yang harus nullable karena seseorang tidak dapat menjadi siswa dan instruktur pada saat yang sama (setidaknya tidak dalam panduan ini).

Menambahkan Entitas baru

  • Tambahkan entitas baru. Untuk melakukan ini, klik kanan pada ruang kosong permukaan desain Perancang Kerangka Kerja Entitas, dan pilih Add-Entity>.
  • Ketik Instruktur untuk Nama entitas dan pilih Orang dari daftar drop-down untuk jenis Dasar.
  • Klik OK.
  • Tambahkan entitas baru lainnya. Ketik Siswa untuk Nama entitas dan pilih Orang dari daftar drop-down untuk jenis Dasar.

Dua jenis entitas baru ditambahkan ke permukaan desain. Panah menunjuk dari jenis entitas baru ke jenis entitas Orang ; ini menunjukkan bahwa Orang adalah jenis dasar untuk jenis entitas baru.

  • Klik kanan properti HireDate entitas Orang. Pilih Potong (atau gunakan tombol Ctrl-X).
  • Klik kanan entitas Instruktur dan pilih Tempel (atau gunakan kunci Ctrl-V).
  • Klik kanan properti HireDate dan pilih Properti.
  • Di jendela Properti , atur properti Nullable ke false.
  • Klik kanan properti EnrollmentDate dari entitas Orang. Pilih Potong (atau gunakan tombol Ctrl-X).
  • Klik kanan entitas Siswa dan pilih Tempel(atau gunakan kunci Ctrl-V).
  • Pilih properti EnrollmentDate dan atur properti Nullable ke false.
  • Pilih jenis entitas Orang. Di jendela Properti, atur properti Abstract-nya ke true.
  • Hapus properti Diskriminator dari Orang. Alasan harus dihapus dijelaskan di bagian berikut.

Memetakan entitas

  • Klik kanan Instruktur dan pilih Pemetaan Tabel. Entitas Instruktur dipilih di jendela Detail Pemetaan.

  • Klik <Tambahkan Tabel atau Tampilan> di jendela Detail Pemetaan. Bidang <Tambahkan Tabel atau Tampilan> menjadi daftar drop-down tabel atau tampilan yang dapat dipetakan oleh entitas yang dipilih.

  • Pilih Orang dari daftar drop-down.

  • Jendela Detail Pemetaan diperbarui dengan pemetaan kolom default dan opsi untuk menambahkan kondisi.

  • <Klik Tambahkan Kondisi>. Bidang <Tambahkan Kondisi> menjadi daftar drop-down kolom yang kondisinya dapat diatur.

  • Pilih Diskriminator dari daftar drop-down.

  • Di kolom Operator dari jendela Detail Pemetaan, pilih = dari daftar drop-down.

  • Di kolom Nilai/Properti, ketik Instruktur. Hasil akhirnya akan terlihat seperti ini:

    Mapping Details

  • Ulangi langkah-langkah ini untuk jenis entitas Siswa , tetapi buat kondisi sama dengan nilai Siswa .
    Alasan kami ingin menghapus properti Diskriminator , adalah karena Anda tidak dapat memetakan kolom tabel lebih dari sekali. Kolom ini akan digunakan untuk pemetaan bersyarat, sehingga tidak dapat digunakan untuk pemetaan properti juga. Satu-satunya cara dapat digunakan untuk keduanya, jika kondisi menggunakan perbandingan Is Null atau Is Not Null .

Warisan tabel per hierarki sekarang diimplementasikan.

Final TPH

Menggunakan Model

Buka file Program.cs tempat metode Utama ditentukan. Tempelkan kode berikut ke fungsi Utama . Kode menjalankan tiga kueri. Kueri pertama mengembalikan semua objek Orang . Kueri kedua menggunakan metode OfType untuk mengembalikan objek Instruktur . Kueri ketiga menggunakan metode OfType untuk mengembalikan objek Siswa .

    using (var context = new SchoolEntities())
    {
        Console.WriteLine("All people:");
        foreach (var person in context.People)
        {
            Console.WriteLine("    {0} {1}", person.FirstName, person.LastName);
        }

        Console.WriteLine("Instructors only: ");
        foreach (var person in context.People.OfType<Instructor>())
        {
            Console.WriteLine("    {0} {1}", person.FirstName, person.LastName);
        }

        Console.WriteLine("Students only: ");
        foreach (var person in context.People.OfType<Student>())
        {
            Console.WriteLine("    {0} {1}", person.FirstName, person.LastName);
        }
    }