Tablo Değerli İşlevler (TVF'ler)
Dekont
YALNıZCA EF5'e Doğru - Bu sayfada ele alınan özellikler, API'ler vb. Entity Framework 5'te sunulmuştur. Önceki bir sürümü kullanıyorsanız, bilgilerin bir kısmı veya tümü geçerli değildir.
Video ve adım adım izlenecek yol, Entity Framework Tasarım Aracı kullanarak tablo değerli işlevlerin (TVF) nasıl eşleneceği gösterilir. Ayrıca LINQ sorgusundan TVF çağırmayı da gösterir.
TVF'ler şu anda yalnızca Database First iş akışında desteklenmektedir.
ENTITY Framework sürüm 5'te TVF desteği sunulmuştur. Tablo değerli işlevler, sabit listeleri ve uzamsal türler gibi yeni özellikleri kullanmak için .NET Framework 4.5'i hedeflemeniz gerektiğini unutmayın. Visual Studio 2012 varsayılan olarak .NET 4.5'i hedefler.
TVF'ler tek bir önemli farkla saklı yordamlara çok benzer: TVF'nin sonucu birleştirilebilir. Bu, bir TVF'den elde edilecek sonuçların LINQ sorgusunda kullanılabileceğini ancak saklı yordamın sonuçlarının kullanılamayacağı anlamına gelir.
Videoyu izleme
Sunan: Julia Kornich
Önkoşullar
Bu kılavuzu tamamlamak için şunları yapmanız gerekir:
School veritabanını yükleyin.
Visual Studio'nun son sürümüne sahip olmak
Projeyi ayarlama
- Visual Studio’yu açın
- Dosya menüsünde Yeni'nin üzerine gelin ve Proje'ye tıklayın
- Sol bölmede Visual C# öğesine tıklayın ve konsol şablonunu seçin
- Projenin adı olarak TVF yazın ve Tamam'a tıklayın
Veritabanına TVF ekleme
- Görünüm -> SQL Server Nesne Gezgini'ı seçin
- LocalDB sunucu listesinde değilse: SQL Server'a sağ tıklayın ve SQL Server Ekle LocalDB sunucusuna bağlanmak için varsayılan Windows Kimlik Doğrulamasını kullan'ı seçin
- LocalDB düğümünü genişletme
- Veritabanları düğümü altında, Okul veritabanı düğümüne sağ tıklayın ve Yeni Sorgu... öğesini seçin .
- T-SQL Düzenleyicisi'nde aşağıdaki TVF tanımını yapıştırın
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]
(@CourseID INT)
RETURNS TABLE
RETURN
SELECT [EnrollmentID],
[CourseID],
[StudentID],
[Grade]
FROM [dbo].[StudentGrade]
WHERE CourseID = @CourseID
- T-SQL düzenleyicisinde sağ fare düğmesine tıklayın ve Yürüt'e tıklayın
- GetStudentGradesForCourse işlevi School veritabanına eklenir
Model Oluşturma
- Çözüm Gezgini'de proje adına sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Öğe'ye tıklayın
- Soldaki menüden Veri'yi seçin ve ardından Şablonlar bölmesinde Varlık Veri Modeli'ni ADO.NET seçin
- Dosya adı olarak TVFModel.edmx yazın ve Ekle'ye tıklayın
- Model İçeriği Seç iletişim kutusunda Veritabanından oluştur'u seçin ve İleri'ye tıklayın
- Sunucu adı metin kutusunda Yeni Bağlan ion Enter (localdb)\mssqllocaldb öğesine tıklayın Veritabanı adı için Okul Girin Tamam'a tıklayın
- Veritabanı Nesnelerinizi Seçin iletişim kutusunda, Tablolar düğümü altında Kişi, ÖğrenciYeni ve Kurs tablolarını seçin
- Visual Studio 2012'den başlayarak Entity Tasarım Aracı Saklı Yordamlarınızı ve İşlevlerinizi toplu olarak içeri aktarmanıza olanak tanıyan Saklı Yordamlar ve İşlevler düğümü notunun altında bulunan GetStudentGradesForCourse işlevini seçin
- Son’a tıklayın
- Modelinizi düzenlemek için bir tasarım yüzeyi sağlayan Entity Tasarım Aracı görüntülenir. Veritabanı Nesnelerinizi Seçin iletişim kutusunda seçtiğiniz tüm nesneler modele eklenir.
- Varsayılan olarak, içeri aktarılan her saklı yordamın veya işlevin sonuç şekli, varlık modelinizde otomatik olarak yeni bir karmaşık tür haline gelir. Ancak GetStudentGradesForCourse işlevinin sonuçlarını StudentGrade varlığıyla eşlemek istiyoruz: Tasarım yüzeyine sağ tıklayın ve Model Tarayıcı'da Model Tarayıcısı'nı seçin, İşlev İçeri Aktarmaları'nı seçin ve ardından GetStudentGradesForCourse işlevine çift tıklayın İşlev İçeri Aktarmayı Düzenle iletişim kutusunda Varlıklar'ı ve StudentGrade'ı seçin
Verileri Kalıcı Hale Getir ve Al
Main yönteminin tanımlandığı dosyayı açın. Main işlevine aşağıdaki kodu ekleyin.
Aşağıdaki kod, Tablo değerli İşlev kullanan bir sorgunun nasıl derlendiğini gösterir. Sorgu, sonuçları ilgili Kurs başlığını ve 3,5'e eşit veya daha yüksek bir nota sahip ilgili öğrencileri içeren anonim bir türe projeler.
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);
}
}
Uygulamayı derleyin ve çalıştırın. Program aşağıdaki çıkışı oluşturur:
Couse: Microeconomics, Student: Arturo Anand
Couse: Microeconomics, Student: Carson Bryant
Özet
Bu kılavuzda, Entity Framework Tasarım Aracı kullanarak Tablo değerli İşlevlerin (TVF) nasıl eşleneceğine baktık. Ayrıca LINQ sorgusundan TVF çağırmayı da göstermiştir.