Menentukan Kueri - Desainer EF
Panduan ini menunjukkan cara menambahkan kueri yang menentukan dan jenis entitas yang sesuai ke model menggunakan EF Designer. Kueri yang menentukan umumnya digunakan untuk menyediakan fungsionalitas yang mirip dengan yang disediakan oleh tampilan database, tetapi tampilan ditentukan dalam model, bukan database. Kueri yang menentukan memungkinkan Anda menjalankan pernyataan SQL yang ditentukan dalam elemen DefiningQuery dari file .edmx. Untuk informasi selengkapnya, lihat DefiningQuery di Spesifikasi SSDL.
Saat menggunakan kueri yang mendefinisikan, Anda juga harus menentukan jenis entitas dalam model Anda. Jenis entitas digunakan untuk menampilkan data yang diekspos oleh kueri yang menentukan. Perhatikan bahwa data yang muncul melalui jenis entitas ini bersifat baca-saja.
Kueri berparameter tidak dapat dijalankan sebagai menentukan kueri. Namun, data dapat diperbarui dengan memetakan fungsi sisipan, pembaruan, dan penghapusan jenis entitas yang menampilkan data ke prosedur tersimpan. Untuk informasi selengkapnya, lihat Menyisipkan, Memperbarui, dan Menghapus dengan Prosedur Tersimpan.
Topik ini memperlihatkan cara melakukan tugas berikut.
- Menambahkan Kueri yang Menentukan
- Menambahkan Jenis Entitas ke Model
- Memetakan Kueri yang Menentukan ke Jenis Entitas
Untuk menyelesaikan panduan ini, Anda memerlukan:
Panduan ini menggunakan Visual Studio 2012 atau yang lebih baru.
- Buka Visual Studio.
- Pada menu File, arahkan ke Baru, lalu klik Proyek.
- Di panel kiri, klik Visual C#, lalu pilih templat Aplikasi Konsol.
- Masukkan DefiningQuerySample sebagai nama proyek dan klik OK.
Klik kanan nama proyek di Penjelajah Solusi, arahkan ke Tambahkan, lalu klik Item Baru.
Pilih Data dari menu sebelah kiri lalu pilih ADO.NET Model Data Entitas di panel Templat.
Masukkan DefiningQueryModel.edmx untuk nama file, lalu klik Tambahkan.
Dalam kotak dialog Pilih Konten Model, pilih Hasilkan dari database, lalu klik Berikutnya.
Klik Koneksi ion 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, centang simpul Tabel . Ini akan menambahkan semua tabel ke model Sekolah .
Klik Selesai.
Di Penjelajah Solusi, klik kanan file DefiningQueryModel.edmx dan pilih Buka Dengan....
Pilih Editor XML (Teks).
Klik Ya jika diminta dengan pesan berikut:
Dalam langkah ini kita akan menggunakan Editor XML untuk menambahkan kueri yang menentukan dan jenis entitas ke bagian SSDL dari file .edmx.
- Tambahkan elemen EntitySet ke bagian SSDL dari file .edmx (baris 5 hingga 13). Tentukan yang berikut ini:
- Hanya atribut Nama dan EntityType dari elemen EntitySet yang ditentukan.
- Nama yang sepenuhnya memenuhi syarat dari jenis entitas digunakan dalam atribut EntityType .
- Pernyataan SQL yang akan dijalankan ditentukan dalam elemen DefiningQuery .
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="SchoolModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
<EntityContainer Name="SchoolModelStoreContainer">
<EntitySet Name="GradeReport" EntityType="SchoolModel.Store.GradeReport">
<DefiningQuery>
SELECT CourseID, Grade, FirstName, LastName
FROM StudentGrade
JOIN
(SELECT * FROM Person WHERE EnrollmentDate IS NOT NULL) AS p
ON StudentID = p.PersonID
</DefiningQuery>
</EntitySet>
<EntitySet Name="Course" EntityType="SchoolModel.Store.Course" store:Type="Tables" Schema="dbo" />
- Tambahkan elemen EntityType ke bagian SSDL dari .edmx. file seperti yang ditunjukkan di bawah ini. Perhatikan hal berikut:
- Nilai atribut Name sesuai dengan nilai atribut EntityType di elemen EntitySet di atas, meskipun nama yang sepenuhnya memenuhi syarat dari jenis entitas digunakan dalam atribut EntityType.
- Nama properti sesuai dengan nama kolom yang dikembalikan oleh pernyataan SQL dalam elemen DefiningQuery (di atas).
- Dalam contoh ini, kunci entitas terdiri dari tiga properti untuk memastikan nilai kunci yang unik.
<EntityType Name="GradeReport">
<Key>
<PropertyRef Name="CourseID" />
<PropertyRef Name="FirstName" />
<PropertyRef Name="LastName" />
</Key>
<Property Name="CourseID"
Type="int"
Nullable="false" />
<Property Name="Grade"
Type="decimal"
Precision="3"
Scale="2" />
<Property Name="FirstName"
Type="nvarchar"
Nullable="false"
MaxLength="50" />
<Property Name="LastName"
Type="nvarchar"
Nullable="false"
MaxLength="50" />
</EntityType>
Catatan
Jika nanti Anda menjalankan dialog Wizard Perbarui Model, setiap perubahan yang dilakukan pada model penyimpanan, termasuk menentukan kueri, akan ditimpa.
Dalam langkah ini kita akan menambahkan jenis entitas ke model konseptual menggunakan EF Designer. Perhatikan hal-hal berikut:
- Nama entitas sesuai dengan nilai atribut EntityType dalam elemen EntitySet di atas.
- Nama properti sesuai dengan nama kolom yang dikembalikan oleh pernyataan SQL dalam elemen DefiningQuery di atas.
- Dalam contoh ini, kunci entitas terdiri dari tiga properti untuk memastikan nilai kunci yang unik.
Buka model di Desainer EF.
Klik dua kali DefiningQueryModel.edmx.
Ucapkan Ya untuk pesan berikut:
Perancang Entitas, yang menyediakan permukaan desain untuk mengedit model Anda, ditampilkan.
- Klik kanan permukaan perancang dan pilih Tambahkan Entitas Baru>....
- Tentukan GradeReport untuk nama entitas dan CourseID untuk Properti Kunci.
- Klik kanan entitas GradeReport dan pilih Tambahkan Properti Skalar Baru>.
- Ubah nama default properti menjadi FirstName.
- Tambahkan properti skalar lain dan tentukan LastName untuk nama tersebut.
- Tambahkan properti skalar lain dan tentukan Nilai untuk nama tersebut.
- Di jendela Properti, ubah properti Jenis Nilai menjadi Desimal.
- Pilih properti FirstName dan LastName .
- Di jendela Properti , ubah nilai properti EntityKey menjadi True.
Akibatnya, elemen berikut ditambahkan ke bagian CSDL dari file .edmx.
<EntitySet Name="GradeReport" EntityType="SchoolModel.GradeReport" />
<EntityType Name="GradeReport">
. . .
</EntityType>
Dalam langkah ini, kita akan menggunakan jendela Detail Pemetaan untuk memetakan jenis entitas konseptual dan penyimpanan.
- Klik kanan entitas GradeReport pada permukaan desain dan pilih Pemetaan Tabel.
Jendela Detail Pemetaan ditampilkan. - Pilih GradeReport dari< daftar dropdown Tambahkan Tabel atau Tampilan> (terletak di bawah Tabel).
Pemetaan default antara jenis entitas GradeReport konseptual dan penyimpanan muncul.
Akibatnya, elemen EntitySetMapping ditambahkan ke bagian pemetaan file .edmx.
<EntitySetMapping Name="GradeReports">
<EntityTypeMapping TypeName="IsTypeOf(SchoolModel.GradeReport)">
<MappingFragment StoreEntitySet="GradeReport">
<ScalarProperty Name="LastName" ColumnName="LastName" />
<ScalarProperty Name="FirstName" ColumnName="FirstName" />
<ScalarProperty Name="Grade" ColumnName="Grade" />
<ScalarProperty Name="CourseID" ColumnName="CourseID" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
- Kompilasi aplikasi.
Anda sekarang dapat menjalankan kueri yang menentukan dengan menggunakan jenis entitas GradeReport .
using (var context = new SchoolEntities())
{
var report = context.GradeReports.FirstOrDefault();
Console.WriteLine("{0} {1} got {2}",
report.FirstName, report.LastName, report.Grade);
}
Umpan balik .NET
.NET adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: