Entity Framework 4.0 Database First ve ASP.NET 4 Web Forms Ile Çalışmaya Başlama - Bölüm 7

tarafından Tom Dykstra

Contoso University örnek web uygulaması, Entity Framework 4.0 ve Visual Studio 2010 kullanarak ASP.NET Web Forms uygulamaları oluşturmayı gösterir. Öğretici serisi hakkında bilgi için serideki ilk öğreticiye bakın

Saklı Yordamları Kullanma

Önceki öğreticide hiyerarşi başına tablo devralma deseni uyguladınız. Bu öğreticide, veritabanı erişimi üzerinde daha fazla denetim elde etmek için saklı yordamların nasıl kullanılacağı gösterilir.

Entity Framework, veritabanı erişimi için saklı yordamlar kullanması gerektiğini belirtmenize olanak tanır. Herhangi bir varlık türü için, bu tür varlıkları oluşturmak, güncelleştirmek veya silmek için kullanılacak saklı yordamı belirtebilirsiniz. Daha sonra veri modelinde, varlık kümelerini alma gibi görevleri gerçekleştirmek için kullanabileceğiniz saklı yordamlara başvurular ekleyebilirsiniz.

Saklı yordamları kullanmak, veritabanı erişimi için yaygın bir gereksinimdir. Bazı durumlarda veritabanı yöneticisi, güvenlik nedeniyle tüm veritabanı erişiminin saklı yordamlardan geçmesini gerektirebilir. Diğer durumlarda, Entity Framework'ün veritabanını güncelleştirirken kullandığı işlemlerden bazılarında iş mantığı oluşturmak isteyebilirsiniz. Örneğin, bir varlık her silindiğinde bir arşiv veritabanına kopyalamak isteyebilirsiniz. Ya da bir satır her güncelleştirildiğinde, değişikliği yapanı kaydeden bir günlük tablosuna satır yazmak isteyebilirsiniz. Entity Framework bir varlığı her sildiğinde veya bir varlığı güncelleştirdiğinde çağrılan saklı yordamda bu tür görevleri gerçekleştirebilirsiniz.

Önceki öğreticide olduğu gibi yeni sayfa oluşturmayacaksınız. Bunun yerine, Entity Framework'ün önceden oluşturduğunuz sayfalardan bazıları için veritabanına erişme şeklini değiştireceksiniz.

Bu öğreticide, veritabanında ve Instructor varlıkları eklemek Student için saklı yordamlar oluşturacaksınız. Bunları veri modeline ekleyecek ve Entity Framework'ün bunları veritabanına ve Instructor varlıkları eklemek Student için kullanması gerektiğini belirteceksiniz. Varlıkları almak Course için kullanabileceğiniz bir saklı yordam da oluşturacaksınız.

Veritabanında Saklı Yordamlar Oluşturma

(Bu öğreticiyle birlikte indirilebilen projeden School.mdf dosyasını kullanıyorsanız saklı yordamlar zaten mevcut olduğundan bu bölümü atlayabilirsiniz.)

Sunucu Gezgini'ndeSchool.mdf dosyasını genişletin, Saklı Yordamlar'a sağ tıklayın ve Yeni Saklı Yordam Ekle'yi seçin.

image15

Aşağıdaki SQL deyimlerini kopyalayın ve çatı saklı yordamını değiştirerek saklı yordam penceresine yapıştırın.

CREATE PROCEDURE [dbo].[InsertStudent]
    @LastName nvarchar(50),
    @FirstName nvarchar(50),
    @EnrollmentDate datetime
    AS
    INSERT INTO dbo.Person (LastName, 
                FirstName, 
                EnrollmentDate)
    VALUES (@LastName, 
        @FirstName, 
        @EnrollmentDate);
    SELECT SCOPE_IDENTITY() as NewPersonID;

resim14

Student varlıkların dört özelliği vardır: PersonID, LastName, FirstNameve EnrollmentDate. Veritabanı kimlik değerini otomatik olarak oluşturur ve saklı yordam diğer üçü için parametreleri kabul eder. Saklı yordam, Entity Framework'ün bellekte tuttuğu varlığın sürümünde bunu izleyebilmesi için yeni satırın kayıt anahtarının değerini döndürür.

Saklı yordam penceresini kaydedin ve kapatın.

Aşağıdaki SQL deyimlerini kullanarak aynı şekilde bir InsertInstructor saklı yordam oluşturun:

CREATE PROCEDURE [dbo].[InsertInstructor]
        @LastName nvarchar(50),
    @FirstName nvarchar(50),
    @HireDate datetime
    AS
    INSERT INTO dbo.Person (LastName, 
                FirstName, 
                HireDate)
    VALUES (@LastName, 
        @FirstName, 
        @HireDate);
    SELECT SCOPE_IDENTITY() as NewPersonID;

ve Instructor varlıkları için Student de saklı yordamlar oluşturunUpdate. (Veritabanında hem hem de InstructorStudent varlıklar için çalışacak bir DeletePerson saklı yordam zaten var.)

CREATE PROCEDURE [dbo].[UpdateStudent]
    @PersonID int,
    @LastName nvarchar(50),
    @FirstName nvarchar(50),
    @EnrollmentDate datetime
    AS
    UPDATE Person SET LastName=@LastName, 
            FirstName=@FirstName,
            EnrollmentDate=@EnrollmentDate
    WHERE PersonID=@PersonID;
CREATE PROCEDURE [dbo].[UpdateInstructor]
    @PersonID int,
    @LastName nvarchar(50),
    @FirstName nvarchar(50),
    @HireDate datetime
    AS
    UPDATE Person SET LastName=@LastName, 
            FirstName=@FirstName,
            HireDate=@HireDate
    WHERE PersonID=@PersonID;

Bu öğreticide her varlık türü için üç işlevin de (ekleme, güncelleştirme ve silme) tümünü eşleyeceksiniz. Entity Framework sürüm 4, bu işlevlerden yalnızca birini veya ikisini diğerleriyle eşlemeden saklı yordamlara eşlemenize olanak tanır; tek bir istisna vardır: güncelleştirme işlevini eşler ancak silme işlevini eşlemezseniz, varlığı silmeye çalıştığınızda Entity Framework bir özel durum oluşturur. Entity Framework sürüm 3.5'te saklı yordamları eşleme konusunda bu kadar esnekliğe sahip değildiniz: bir işlevi eşlediyseniz üçünü de eşlemeniz gerekiyordu.

Verileri güncelleştirmek yerine okuyan bir saklı yordam oluşturmak için, aşağıdaki SQL deyimlerini kullanarak tüm Course varlıkları seçen bir yordam oluşturun:

CREATE PROCEDURE [dbo].[GetCourses]
            AS
            SELECT CourseID, Title, Credits, DepartmentID FROM dbo.Course

Saklı Yordamları Veri Modeline Ekleme

Saklı yordamlar artık veritabanında tanımlanmıştır, ancak Entity Framework'te kullanılabilir hale getirmek için veri modeline eklenmelidir. SchoolModel.edmx dosyasını açın, tasarım yüzeyine sağ tıklayın ve Veritabanından Modeli Güncelleştir'i seçin. Veritabanı Nesnelerinizi Seçin iletişim kutusunun Ekle sekmesinde Saklı Yordamlar'ı genişletin, yeni oluşturulan saklı yordamları ve DeletePerson saklı yordamı seçin ve son'a tıklayın.

image20

Saklı Yordamları Eşleme

Veri modeli tasarımcısında varlığa sağ tıklayın Student ve Saklı Yordam Eşlemesi'ni seçin.

image21

Entity Framework'ün bu türdeki varlıkları eklemek, güncelleştirmek ve silmek için kullanması gereken saklı yordamları belirtebileceğiniz Eşleme Ayrıntıları penceresi görüntülenir.

image22

Insert işlevini InsertStudent olarak ayarlayın. Pencerede, her biri bir varlık özelliğine eşlenmesi gereken saklı yordam parametrelerinin listesi gösterilir. Adlar aynı olduğundan bunlardan ikisi otomatik olarak eşlenir. adlı FirstNamebir varlık özelliği olmadığından, kullanılabilir varlık özelliklerini gösteren bir açılan listeden el ile seçmeniz FirstMidName gerekir. (Bunun nedeni, ilk öğreticide özelliğin FirstName adını olarak FirstMidName değiştirmiş olmanızdır.)

image23

Aynı Eşleme Ayrıntıları penceresinde, işlevi saklı yordamla UpdateStudenteşleyinUpdate (saklı yordamda yaptığınız Insert gibi parametresi FirstNameolarak belirttiğinizden FirstMidName emin olun) ve işlevi saklı yordamla eşleştirin DeleteDeletePerson.

image01

Eğitmenlerin Instructor ekleme, güncelleştirme ve silme yordamlarını varlığa eşlemek için aynı yordamı izleyin.

image02

Verileri güncelleştirmek yerine okuyan saklı yordamlar için Model Tarayıcısı penceresini kullanarak saklı yordamı döndürdüğü varlık türüne eşlersiniz. Veri modeli tasarımcısında tasarım yüzeyine sağ tıklayın ve Model Tarayıcısı'nı seçin. SchoolModel.Store düğümünü açın ve ardından Saklı Yordamlar düğümünü açın. Ardından saklı yordama GetCourses sağ tıklayın ve İşlev İçeri Aktarma Ekle'yi seçin.

image24

İşlev İçeri Aktarma Ekle iletişim kutusunda, Seçilen Varlıklar Koleksiyonu Döndürür'ün altında, döndürülen varlık türü olarak öğesini seçinCourse. İşiniz bittiğinde, Tamam’a tıklayın. .edmx dosyasını kaydedin ve kapatın.

image25

Saklı Yordamları Ekleme, Güncelleştirme ve Silme Kullanma

Verileri eklemek, güncelleştirmek ve silmek için saklı yordamlar, Entity Framework tarafından bunları veri modeline ekledikten ve uygun varlıklarla eşledikten sonra otomatik olarak kullanılır. Artık StudentsAdd.aspx sayfasını çalıştırabilirsiniz ve her yeni öğrenci oluşturduğunuzda Entity Framework, yeni satırı Student tabloya eklemek için saklı yordamı kullanırInsertStudent.

resim03

Students.aspx sayfasını çalıştırdığınızda yeni öğrenci listede görünür.

image04

Güncelleştirme işlevinin çalıştığını doğrulamak için adı değiştirin ve delete işlevinin çalıştığını doğrulamak için öğrenciyi silin.

image05

Saklı Yordam seçmeyi kullanma

Entity Framework gibi GetCoursessaklı yordamları otomatik olarak çalıştırmaz ve bunları denetimle EntityDataSource kullanamazsınız. Bunları kullanmak için koddan çağırırsınız.

InstructorsCourses.aspx.cs dosyasını açın. yöntemi, PopulateDropDownLists tüm kurs varlıklarını almak için bir LINQ-to-Entities sorgusu kullanır; böylece listede döngü yapabilir ve bir eğitmenin atandığı ve atanmamış olanları belirleyebilir:

var allCourses = (from c in context.Courses
                  select c).ToList();

Bunu aşağıdaki kodla değiştirin:

var allCourses = context.GetCourses();

Sayfa artık tüm derslerin GetCourses listesini almak için saklı yordamı kullanır. Daha önce olduğu gibi çalıştığını doğrulamak için sayfayı çalıştırın.

(Saklı yordam tarafından alınan varlıkların gezinti özellikleri, varsayılan ayarlara bağlı olarak ObjectContext bu varlıklarla ilgili verilerle otomatik olarak doldurulmayabilir. Daha fazla bilgi için bkz. MSDN Kitaplığı'nda İlgili Nesneleri Yükleme .)

Sonraki öğreticide, veri biçimlendirme ve doğrulama kurallarını programlamayı ve test etmeyi kolaylaştırmak için Dinamik Veri işlevselliğini kullanmayı öğreneceksiniz. Veri biçimi dizeleri ve alan gerekip gerekmediği gibi her web sayfası kuralında belirtmek yerine, bu tür kuralları veri modeli meta verilerinde belirtebilirsiniz ve bunlar her sayfaya otomatik olarak uygulanır.