Bagikan melalui


Fungsi Bernilai Tabel (TVF)

Catatan

EF5 Onwards Only - Fitur, API, dll. yang dibahas di halaman ini diperkenalkan dalam Entity Framework 5. Jika Anda menggunakan versi yang lebih lama, beberapa atau semua informasi tidak berlaku.

Video dan panduan langkah demi langkah menunjukkan cara memetakan fungsi bernilai tabel (TVF) menggunakan Perancang Kerangka Kerja Entitas. Ini juga menunjukkan cara memanggil TVF dari kueri LINQ.

TVF saat ini hanya didukung dalam alur kerja Database First.

Dukungan TVF diperkenalkan dalam Entity Framework versi 5. Perhatikan bahwa untuk menggunakan fitur baru seperti fungsi, enum, dan jenis spasial bernilai tabel, Anda harus menargetkan .NET Framework 4.5. Visual Studio 2012 menargetkan .NET 4.5 secara default.

TVF sangat mirip dengan prosedur tersimpan dengan satu perbedaan utama: hasil TVF dapat dikomposisikan. Itu berarti hasil dari TVF dapat digunakan dalam kueri LINQ sementara hasil prosedur tersimpan tidak dapat.

Tonton video

Disajikan Oleh: Julia Kornich

WMV | MP4 | WMV (ZIP)

Prasyarat

Untuk menyelesaikan panduan ini, Anda perlu:

Menyiapkan Proyek

  1. Membuka Visual Studio
  2. Pada menu File , arahkan ke Baru, lalu klik Proyek
  3. Di panel kiri, klik Visual C#, lalu pilih templat Konsol
  4. Masukkan TVF sebagai nama proyek dan klik OK

Menambahkan TVF ke Database

  • Pilih Tampilan -> SQL Server Object Explorer
  • Jika LocalDB tidak ada dalam daftar server: Klik kanan pada SQL Server dan pilih Tambahkan SQL Server Gunakan Autentikasi Windows default untuk menyambungkan ke server LocalDB
  • Memperluas simpul LocalDB
  • Di bawah simpul Database, klik kanan simpul database Sekolah dan pilih Kueri Baru...
  • Di Editor T-SQL, tempel definisi TVF berikut
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]

(@CourseID INT)

RETURNS TABLE

RETURN
    SELECT [EnrollmentID],
           [CourseID],
           [StudentID],
           [Grade]
    FROM   [dbo].[StudentGrade]
    WHERE  CourseID = @CourseID
  • Klik tombol kanan mouse pada editor T-SQL dan pilih Jalankan
  • Fungsi GetStudentGradesForCourse ditambahkan ke database Sekolah

 

Buat model

  1. Klik kanan nama proyek di Penjelajah Solusi, arahkan ke Tambahkan, lalu klik Item Baru
  2. Pilih Data dari menu sebelah kiri lalu pilih ADO.NET Model Data Entitas di panel Templat
  3. Masukkan TVFModel.edmx untuk nama file, lalu klik Tambahkan
  4. Dalam kotak dialog Pilih Konten Model, pilih Hasilkan dari database, lalu klik Berikutnya
  5. Klik New Koneksi ion Enter (localdb)\mssqllocaldb di kotak teks Nama server Masukkan Sekolah untuk nama database Klik OK
  6. Dalam kotak dialog Pilih Objek Database Anda, di bawah simpul Tabel, pilih tabel Orang, StudentGrade, dan Kursus
  7. Pilih fungsi GetStudentGradesForCourse yang terletak di bawah Catatan simpul Prosedur dan Fungsi Tersimpan, yang dimulai dengan Visual Studio 2012, Perancang Entitas memungkinkan Anda mengimpor Prosedur dan Fungsi Tersimpan secara batch
  8. Klik Selesai
  9. 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.
  10. Secara default, bentuk hasil dari setiap prosedur atau fungsi tersimpan yang diimpor akan secara otomatis menjadi jenis kompleks baru dalam model entitas Anda. Tetapi kami ingin memetakan hasil fungsi GetStudentGradesForCourse ke entitas StudentGrade: Klik kanan permukaan desain dan pilih Browser Model Di Browser Model, pilih Impor Fungsi, lalu klik dua kali fungsi GetStudentGradesForCourse Dalam kotak dialog Edit Impor Fungsi, pilih Entitas dan pilih StudentGrade

Pertahankan dan Ambil Data

Buka file tempat metode Utama didefinisikan. Tambahkan kode berikut ke fungsi Utama.

Kode berikut menunjukkan cara membuat kueri yang menggunakan Fungsi bernilai Tabel. Kueri memproyeksikan hasilnya ke dalam jenis anonim yang berisi judul Kursus terkait dan siswa terkait dengan nilai yang lebih besar atau sama dengan 3,5.

using (var context = new SchoolEntities())
{
    var CourseID = 4022;
    var Grade = 3.5M;

    // Return all the best students in the Microeconomics class.
    var students = from s in context.GetStudentGradesForCourse(CourseID)
                            where s.Grade >= Grade
                            select new
                            {
                                s.Person,
                                s.Course.Title
                            };

    foreach (var result in students)
    {
        Console.WriteLine(
            "Couse: {0}, Student: {1} {2}",
            result.Title,  
            result.Person.FirstName,  
            result.Person.LastName);
    }
}

Kompilasi dan jalankan aplikasi. Contoh ini menghasilkan output berikut:

Couse: Microeconomics, Student: Arturo Anand
Couse: Microeconomics, Student: Carson Bryant

Ringkasan

Dalam panduan ini kita melihat cara memetakan Fungsi Bernilai Tabel (TVF) menggunakan Perancang Kerangka Kerja Entitas. Ini juga menunjukkan cara memanggil TVF dari kueri LINQ.