Aracılığıyla paylaş


Sorgu Saklı Yordamlarını Tasarım Aracı

Bu adım adım izlenecek yol, 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 Tasarım Aracı'nin (EF Tasarım Aracı) nasıl kullanılacağını gösterir.

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. Örnek:

var query = context.Products.SqlQuery("EXECUTE [dbo].[GetAllProducts]")`;

Ön koşullar

Bu kılavuzu tamamlamak için şunlara ihtiyacınız olacak:

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ğlan ion'a tıklayın.
    Bağlan ion Ö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.
    Verilerinizi seçin Bağlan ion 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.

    Import Stored Procedures

    Visual Studio 2012'den başlayarak EF Tasarım Aracı saklı yordamların toplu içeri aktarılmasını destekler. Seçili saklı yordamları ve işlevleri giriş 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 GetDepartmentNamesonuç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.