Tasarımcı Sorgusu Saklı Yordamları
Bu adım adım kılavuzda, saklı yordamları bir modele içeri aktarmak ve ardından sonuçları almak için içeri aktarılan saklı yordamları çağırmak için Entity Framework Designer'ın (EF Designer) nasıl kullanılacağı gösterilmektedir.
Code First'un saklı yordamlara veya işlevlere eşlemeyi desteklemediğini unutmayın. Ancak, System.Data.Entity.DbSet.SqlQuery yöntemini kullanarak saklı yordamları veya işlevleri çağırabilirsiniz. Örneğin:
var query = context.Products.SqlQuery("EXECUTE [dbo].[GetAllProducts]")`;
Önkoşullar
Bu kılavuzu tamamlamak için şunlara ihtiyacınız olacak:
- Visual Studio'nun son sürümü.
- Okul örnek veritabanı.
Projeyi ayarlama
- Visual Studio 2012'i açın.
- Dosya-> Yeni -> Proje'yi seçin
- Sol bölmede Visual C# öğesine tıklayın ve konsol şablonunu seçin.
- Ad olarak EFwithSProcsSample girin.
- Tamam'ı seçin.
Model Oluşturma
Çözüm Gezgini'da projeye sağ tıklayın ve Ekle -> Yeni Öğe'yi seçin.
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 EFwithSProcsModel.edmx yazın ve Ekle'ye tıklayın.
Model İçeriği Seç iletişim kutusunda Veritabanından oluştur'u seçin ve ardından İleri'ye tıklayın.
Yeni Bağlantı'ya tıklayın.
Bağlantı Özellikleri iletişim kutusunda sunucu adını girin (örneğin, (localdb)\mssqllocaldb), kimlik doğrulama yöntemini seçin, veritabanı adı için School yazın ve Tamam'a tıklayın.
Veri Bağlantınızı Seçin iletişim kutusu veritabanı bağlantı ayarınızla güncelleştirilir.Veritabanı Nesnelerinizi Seçin iletişim kutusunda, tüm tabloları seçmek için Tablolar onay kutusunu işaretleyin.
Ayrıca Saklı Yordamlar ve İşlevler düğümü altında aşağıdaki saklı yordamları seçin: GetStudentGrades ve GetDepartmentName.Visual Studio 2012'den başlayarak EF Designer, saklı yordamların toplu içeri aktarılmasını destekler. Seçili saklı yordamları ve işlevleri varlık modeline aktar seçeneği varsayılan olarak denetlenmektedir.
Finish (Son) düğmesine tıklayın.
Varsayılan olarak, içeri aktarılan her saklı yordamın veya işlevin birden fazla sütun döndüren sonuç şekli otomatik olarak yeni bir karmaşık tür haline gelir. Bu örnekte, GetStudentGrades işlevinin sonuçlarını StudentGrade varlığıyla ve GetDepartmentName sonuçlarını hiçbiri ile eşlemek istiyoruz (varsayılan değer yok).
İşlev içeri aktarma işleminin bir varlık türü döndürmesi için, karşılık gelen saklı yordam tarafından döndürülen sütunların döndürülen varlık türünün skaler özellikleriyle tam olarak eşleşmesi gerekir. İşlev içeri aktarma işlemi basit türler, karmaşık türler veya değer içermeyen koleksiyonlar da döndürebilir.
- Tasarım yüzeyine sağ tıklayın ve Model Tarayıcısı'nı seçin.
- Model Tarayıcısı'nda İşlev İçeri Aktarmaları'nı seçin ve getStudentGrades işlevine çift tıklayın.
- İşlev İçeri Aktarmayı Düzenle iletişim kutusunda Varlıklar'ı seçin ve StudentGrade'ı seçin.
İşlev İçeri Aktarmaları iletişim kutusunun üst kısmındaki İşlev İçeri Aktarılabilir onay kutusu, birleştirilebilir işlevlerle eşlemenizi sağlar. Bu kutuyu işaretlerseniz Saklı Yordam / İşlev Adı açılan listesinde yalnızca birleştirilebilir işlevler (Tablo değerli İşlevler) görüntülenir. Bu kutuyu işaretlemezseniz, listede yalnızca oluşturulamayan işlevler gösterilir.
Modeli Kullanma
Main yönteminin tanımlandığı Program.cs dosyasını açın. Main işlevine aşağıdaki kodu ekleyin.
Kod iki saklı yordamı çağırır: GetStudentGrades (belirtilen StudentId için StudentGrades döndürür) ve GetDepartmentName (çıkış parametresindeki bölümün adını döndürür).
using (SchoolEntities context = new SchoolEntities())
{
// Specify the Student ID.
int studentId = 2;
// Call GetStudentGrades and iterate through the returned collection.
foreach (StudentGrade grade in context.GetStudentGrades(studentId))
{
Console.WriteLine("StudentID: {0}\tSubject={1}", studentId, grade.Subject);
Console.WriteLine("Student grade: " + grade.Grade);
}
// Call GetDepartmentName.
// Declare the name variable that will contain the value returned by the output parameter.
ObjectParameter name = new ObjectParameter("Name", typeof(String));
context.GetDepartmentName(1, name);
Console.WriteLine("The department name is {0}", name.Value);
}
Uygulamayı derleyin ve çalıştırın. Program aşağıdaki çıkışı oluşturur:
StudentID: 2
Student grade: 4.00
StudentID: 2
Student grade: 3.50
The department name is Engineering
Çıktı Parametreleri
Çıkış parametreleri kullanılırsa, sonuçlar tamamen okunana kadar değerleri kullanılamaz. Bunun nedeni DbDataReader'ın temel davranışıdır. Daha fazla ayrıntı için bkz . DataReader Kullanarak Veri Alma.