Baca dalam bahasa Inggris

Bagikan melalui


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

Prasyarat

Untuk menyelesaikan panduan ini, Anda memerlukan:

  • Versi terbaru Visual Studio.
  • Database sampel Sekolah.

Menyiapkan Proyek

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.

 

Membuat Model berdasarkan Database Sekolah

  • 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).

    XML Editor

  • Klik Ya jika diminta dengan pesan berikut:

    Warning 2

 

Menambahkan Kueri yang Menentukan

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.

 

Menambahkan Jenis Entitas ke Model

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:

    Warning 2

 

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>

 

Memetakan Kueri yang Menentukan ke Jenis Entitas

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.
    Mapping Details3

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.

 

Memanggil Kueri yang Mendefinisikan dalam Kode Anda

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