Entity Framework - Depolanan Prosedürler

Entity Framework, otomatik komut oluşturma yerine veya bununla birlikte Varlık Veri Modelinde saklı yordamları kullanmanıza olanak tanır.

  • Veritabanı tablolarında önceden tanımlanmış mantığı gerçekleştirmek için saklı yordamları kullanabilirsiniz ve birçok kuruluşun bu saklı yordamların kullanılmasını gerektiren yerinde ilkeleri vardır.

  • Ayrıca, EF'in varlıkları eklemek, güncellemek veya silmek için saklı yordamlarınızı kullanması gerektiğini de belirtebilir.

  • Dinamik olarak oluşturulmuş komutlar güvenli, verimli ve genellikle sizin yazdığınız kadar iyi veya daha iyi olsa da, saklı yordamların zaten mevcut olduğu ve şirket uygulamalarınızın tabloların doğrudan kullanımını kısıtlayabildiği birçok durum vardır.

  • Alternatif olarak, mağazada nelerin yürütüldüğü üzerinde açık bir kontrole sahip olmak ve saklı yordamlar oluşturmayı tercih edebilirsiniz.

Aşağıdaki örnek, Dosya → Yeni → Proje'den yeni bir proje oluşturur.

Step 1 - Orta bölmeden Konsol Uygulamasını seçin ve ad alanına StoredProceduresDemo yazın.

Step 2 - Server explorer'da veritabanınıza sağ tıklayın.

Step 3 - Veritabanınıza yeni bir tablo eklemek için Yeni Sorgu öğesini seçin ve T-SQL düzenleyiciye aşağıdaki kodu girin.

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N'[dbo].[StudentGrade]') AND type in (N'U'))

BEGIN

   CREATE TABLE [dbo].[StudentGrade](

      [EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
      [CourseID] [int] NOT NULL,
      [StudentID] [int] NOT NULL,
      [Grade] [decimal](3, 2) NULL,

      CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED (
         [EnrollmentID] ASC
      )

      WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

   ) ON [PRIMARY]

END
GO

Step 4 - Düzenleyiciye sağ tıklayın ve Yürüt'ü seçin.

Step 5- Veritabanınıza sağ tıklayın ve yenile seçeneğine tıklayın. Veritabanınızda yeni eklenen tabloyu göreceksiniz.

Step 6 - Sunucu gezgininde, veritabanınıza tekrar sağ tıklayın.

Step 7 - Veritabanınıza Öğrenci notlarını döndürecek bir saklı yordam eklemek için Yeni Sorgu öğesini seçin ve aşağıdaki kodu T-SQL düzenleyicisine girin.

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N'[dbo].[GetStudentGrades]') AND type in (N'P', N'PC'))

BEGIN

   EXEC dbo.sp_executesql @statement = N'
   CREATE PROCEDURE [dbo].[GetStudentGrades]
   @StudentID int
   AS
   SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade 
   WHERE StudentID = @StudentID
   '
END
GO

Step 8 - Düzenleyiciye sağ tıklayın ve Yürüt'ü seçin.

Step 9- Veritabanınıza sağ tıklayın ve yenile seçeneğine tıklayın. Veritabanınızda bir saklı yordamın oluşturulduğunu göreceksiniz.

Step 10 - Solution Explorer'da proje adına sağ tıklayın ve Add → New Item'ı seçin.

Step 11 - Ardından Şablonlar bölmesinde ADO.NET Varlık Veri Modeli'ni seçin.

Step 12 - SPModel'i ad olarak girin ve ardından Ekle'yi tıklayın.

Step 13 - Model İçeriğini Seçin iletişim kutusunda, veritabanından EF tasarımcısını seçin ve ardından İleri'ye tıklayın.

Step 14 - Veritabanınızı seçin ve İleri'ye tıklayın.

Step 15 - Veritabanı Nesnelerinizi Seçin iletişim kutusunda tablolara, görünümlere tıklayın.

Step 16 - Stored Procedures and Functions düğümünün altında bulunan GetStudentGradesForCourse işlevini seçin ve Bitir'i tıklayın.

Step 17 - Görünüm → Diğer Pencereler → Varlık Veri Modeli Tarayıcısı'nı seçin ve İşlev İçe Aktarmalar altında GetStudentGrades'e sağ tıklayın ve Düzenle'yi seçin.

Aşağıdaki diyaloğu üretecektir.

Step 18 - Varlıklar radyo düğmesine tıklayın ve bu saklı yordamın dönüş türü olarak birleşik giriş kutusundan StudentGrade öğesini seçin ve Tamam'a tıklayın.

GetStudentGrades saklı yordamında öğrenci kimliğini parametre olarak ileterek tüm notların alınacağı aşağıdaki C # koduna bir göz atalım.

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         int studentID = 22;
         var studentGrades = context.GetStudentGrades(studentID);

         foreach (var student in studentGrades) {
            Console.WriteLine("Course ID: {0}, Title: {1}, Grade: {2} ", 
               student.CourseID, student.Course.Title, student.Grade);
         }

         Console.ReadKey();

      }
   }
}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında aşağıdaki çıktıyı alacaksınız -

Course ID: 4022, Title: Microeconomics, Grade: 3.00
Course ID: 4041, Title: Macroeconomics, Grade: 3.50

Daha iyi anlamak için yukarıdaki örneği adım adım uygulamanızı öneririz.