Jenis Kompleks - Desainer EF
Topik ini menunjukkan cara memetakan jenis kompleks dengan Perancang Kerangka Kerja Entitas (Perancang EF) dan cara mengkueri entitas yang berisi properti jenis kompleks.
Gambar berikut menunjukkan jendela utama yang digunakan saat bekerja dengan EF Designer.
Catatan
Saat Anda membangun model konseptual, peringatan tentang entitas dan asosiasi yang tidak dipetakan mungkin muncul di Daftar Kesalahan. Anda dapat mengabaikan peringatan ini karena setelah Anda memilih untuk menghasilkan database dari model, kesalahan akan hilang.
Apa itu Jenis Kompleks
Jenis kompleks adalah properti non-skalar dari jenis entitas yang memungkinkan properti skalar diatur dalam entitas. Seperti entitas, jenis kompleks terdiri dari properti skalar atau properti jenis kompleks lainnya.
Saat Anda bekerja dengan objek yang mewakili jenis kompleks, ketahui hal berikut:
- Jenis kompleks tidak memiliki kunci dan karenanya tidak dapat ada secara independen. Jenis kompleks hanya dapat ada sebagai properti jenis entitas atau jenis kompleks lainnya.
- Tipe kompleks tidak dapat berpartisipasi dalam asosiasi dan tidak boleh berisi properti navigasi.
- Properti tipe kompleks tidak boleh null. **InvalidOperationException **terjadi ketika DbContext.SaveChanges dipanggil dan objek kompleks null ditemui. Properti skalar objek kompleks bisa null.
- Tipe kompleks tidak dapat mewarisi dari jenis kompleks lainnya.
- Anda harus menentukan jenis kompleks sebagai kelas.
- EF mendeteksi perubahan pada anggota pada objek jenis kompleks saat DbContext.DetectChanges dipanggil. Entity Framework memanggil DetectChanges secara otomatis ketika anggota berikut dipanggil: DbSet.Find, DbSet.Local, DbSet.Remove, DbSet.Add, DbSet.Attach, DbContext.SaveChanges, DbContext.GetValidationErrors, DbContext.Entry, DbChangeTracker.Entries.
Merefaktor Properti Entitas ke Dalam Jenis Kompleks Baru
Jika Anda sudah memiliki entitas dalam model konseptual, Anda mungkin ingin merefaktor beberapa properti ke dalam properti jenis kompleks.
Pada permukaan perancang, pilih satu atau beberapa properti (tidak termasuk properti navigasi) entitas, lalu klik kanan dan pilih Refaktor -> Pindah ke Jenis Kompleks Baru.
Jenis kompleks baru dengan properti yang dipilih ditambahkan ke Browser Model. Jenis kompleks diberi nama default.
Properti kompleks dari jenis yang baru dibuat menggantikan properti yang dipilih. Semua pemetaan properti dipertahankan.
Membuat Jenis Kompleks Baru
Anda juga dapat membuat jenis kompleks baru yang tidak berisi properti entitas yang ada.
Klik kanan folder Tipe Kompleks di Browser Model, arahkan ke TambahkanJenis Kompleks Baru.... Atau, Anda dapat memilih folder Jenis Kompleks dan menekan tombol Sisipkan di keyboard Anda.
Jenis kompleks baru ditambahkan ke folder dengan nama default. Anda sekarang dapat menambahkan properti ke jenis tersebut.
Menambahkan Properti ke Tipe Kompleks
Properti dari jenis kompleks dapat berupa jenis skalar atau jenis kompleks yang ada. Namun, properti jenis kompleks tidak dapat memiliki referensi melingkar. Misalnya, jenis kompleks OnsiteCourseDetails tidak dapat memiliki properti jenis kompleks OnsiteCourseDetails.
Anda dapat menambahkan properti ke jenis kompleks dengan salah satu cara yang tercantum di bawah ini.
Klik kanan jenis kompleks di Browser Model, arahkan ke Tambahkan, lalu arahkan ke Properti Skalar atau Properti Kompleks, lalu pilih jenis properti yang diinginkan. Atau, Anda dapat memilih jenis kompleks lalu menekan tombol Sisipkan di keyboard Anda.
Properti baru ditambahkan ke jenis kompleks dengan nama default.
ATAU-
Klik kanan properti entitas pada permukaan EF Designer dan pilih Salin, lalu klik kanan jenis kompleks di Browser Model dan pilih Tempel.
Mengganti nama Tipe Kompleks
Saat Anda mengganti nama jenis kompleks, semua referensi ke jenis diperbarui di seluruh proyek.
Perlahan-lahan klik dua kali jenis kompleks di Browser Model. Nama akan dipilih dan dalam mode edit.
ATAU-
Klik kanan jenis kompleks di Browser Model dan pilih Ganti Nama.
ATAU-
Pilih jenis kompleks di Browser Model dan tekan tombol F2.
ATAU-
Klik kanan jenis kompleks di Browser Model dan pilih Properti. Edit nama di jendela Properti .
Menambahkan Tipe Kompleks yang Ada ke Entitas dan Memetakan Propertinya ke Kolom Tabel
Klik kanan entitas, arahkan ke Tambahkan Baru, dan pilih Properti Kompleks. Properti jenis kompleks dengan nama default ditambahkan ke entitas. Jenis default (dipilih dari jenis kompleks yang ada) ditetapkan ke properti .
Tetapkan jenis yang diinginkan ke properti di jendela Properti . Setelah menambahkan properti jenis kompleks ke entitas, Anda harus memetakan propertinya ke kolom tabel.
Klik kanan jenis entitas pada permukaan desain atau di Browser Model dan pilih Pemetaan Tabel. Pemetaan tabel ditampilkan di jendela Detail Pemetaan.
Perluas Peta ke <simpul Nama> Tabel. Simpul Pemetaan Kolom muncul.
Perluas simpul Pemetaan Kolom. Daftar semua kolom dalam tabel muncul. Properti default (jika ada) tempat peta kolom tercantum di bawah judul Nilai/Properti .
Pilih kolom yang ingin Anda petakan, lalu klik kanan bidang Nilai/Properti terkait. Daftar drop-down semua properti skalar ditampilkan.
Pilih properti yang sesuai.
Ulangi langkah 6 dan 7 untuk setiap kolom tabel.
Catatan
Untuk menghapus pemetaan kolom, pilih kolom yang ingin Anda petakan, lalu klik bidang Nilai/Properti . Lalu, pilih Hapus dari daftar drop-down.
Memetakan Impor Fungsi ke Tipe Kompleks
Impor fungsi didasarkan pada prosedur tersimpan. Untuk memetakan impor fungsi ke jenis kompleks, kolom yang dikembalikan oleh prosedur tersimpan yang sesuai harus cocok dengan properti jenis kompleks dalam angka dan harus memiliki jenis penyimpanan yang kompatibel dengan jenis properti.
Klik dua kali pada fungsi yang diimpor yang ingin Anda petakan ke jenis kompleks.
Isi pengaturan untuk impor fungsi baru, sebagai berikut:
Tentukan prosedur tersimpan tempat Anda membuat impor fungsi di bidang Nama Prosedur Tersimpan. Bidang ini adalah daftar drop-down yang menampilkan semua prosedur tersimpan dalam model penyimpanan.
Tentukan nama impor fungsi di bidang Nama Impor Fungsi.
Pilih Kompleks sebagai jenis pengembalian lalu tentukan jenis pengembalian kompleks tertentu dengan memilih jenis yang sesuai dari daftar drop-down.
Klik OK. Entri impor fungsi dibuat dalam model konseptual.
Kustomisasi Pemetaan Kolom untuk Impor Fungsi
- Klik kanan impor fungsi di Browser Model dan pilih Pemetaan Impor Fungsi. Jendela Detail Pemetaan muncul dan memperlihatkan pemetaan default untuk impor fungsi. Panah menunjukkan pemetaan antara nilai kolom dan nilai properti. Secara default, nama kolom diasumsikan sama dengan nama properti jenis kompleks. Nama kolom default muncul dalam teks abu-abu.
- Jika perlu, ubah nama kolom agar sesuai dengan nama kolom yang dikembalikan oleh prosedur tersimpan yang sesuai dengan impor fungsi.
Menghapus Tipe Kompleks
Saat Anda menghapus jenis kompleks, jenis dihapus dari model konseptual dan pemetaan untuk semua instans jenis akan dihapus. Namun, referensi ke jenis tidak diperbarui. Misalnya, jika entitas memiliki properti jenis kompleks jenis ComplexType1 dan ComplexType1 dihapus di Browser Model, properti entitas yang sesuai tidak diperbarui. Model tidak akan memvalidasi karena berisi entitas yang mereferensikan jenis kompleks yang dihapus. Anda dapat memperbarui atau menghapus referensi ke jenis kompleks yang dihapus dengan menggunakan Perancang Entitas.
Klik kanan jenis kompleks di Browser Model dan pilih Hapus.
ATAU-
Pilih jenis kompleks di Browser Model dan tekan tombol Hapus di keyboard Anda.
Kueri untuk Entitas yang Berisi Properti Tipe Kompleks
Kode berikut menunjukkan cara menjalankan kueri yang mengembalikan kumpulan objek jenis entitas yang berisi properti jenis kompleks.
using (SchoolEntities context = new SchoolEntities())
{
var courses =
from c in context.OnsiteCourses
order by c.Details.Time
select c;
foreach (var c in courses)
{
Console.WriteLine("Time: " + c.Details.Time);
Console.WriteLine("Days: " + c.Details.Days);
Console.WriteLine("Location: " + c.Details.Location);
}
}