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.
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;
Student
varlıkların dört özelliği vardır: PersonID
, LastName
, FirstName
ve 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 Instructor
Student
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.
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.
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.
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ı FirstName
bir 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.)
Aynı Eşleme Ayrıntıları penceresinde, işlevi saklı yordamla UpdateStudent
eşleyinUpdate
(saklı yordamda yaptığınız Insert
gibi parametresi FirstName
olarak belirttiğinizden FirstMidName
emin olun) ve işlevi saklı yordamla eşleştirin Delete
DeletePerson
.
Eğitmenlerin Instructor
ekleme, güncelleştirme ve silme yordamlarını varlığa eşlemek için aynı yordamı izleyin.
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.
İş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.
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
.
Students.aspx sayfasını çalıştırdığınızda yeni öğrenci listede görünür.
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.
Saklı Yordam seçmeyi kullanma
Entity Framework gibi GetCourses
saklı 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.