CUD Saklı Yordamlarını Tasarım Aracı

Bu adım adım kılavuz, varlık türünün create\insert, update ve delete (CUD) işlemlerini Entity Framework Tasarım Aracı (EF Tasarım Aracı) kullanarak saklı yordamlarla eşlemeyi gösterir.  Varsayılan olarak, Entity Framework CUD işlemleri için SQL deyimlerini otomatik olarak oluşturur, ancak saklı yordamları bu işlemlerle de eşleyebilirsiniz.  

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]");

CUD İşlemlerini Saklı Yordamlarla Eşlerken Dikkat Edilmesi Gerekenler

CUD işlemleri saklı yordamlarla eşlendiğinde aşağıdaki noktalar geçerlidir:

  • CUD işlemlerinden birini saklı yordamla eşlerseniz, bunların tümünü eşleyin. Üçünü de eşlemezseniz, yürütülürse eşlenmemiş işlemler başarısız olur ve bir UpdateException oluşturulur.
  • Saklı yordamın her parametresini varlık özelliklerine eşlemeniz gerekir.
  • Sunucu eklenen satır için birincil anahtar değeri oluşturursa, bu değeri varlığın anahtar özelliğine geri eşlemeniz gerekir. Aşağıdaki örnekte, InsertPerson saklı yordamı, saklı yordamın sonuç kümesinin bir parçası olarak yeni oluşturulan birincil anahtarı döndürür. Birincil anahtar, EF Tasarım Aracı Sonuç Bağlamaları> Ekle özelliği kullanılarak< varlık anahtarına (PersonID) eşlenir.
  • Saklı yordam çağrıları kavramsal modeldeki varlıklarla 1:1 eşlenir. Örneğin, kavramsal modelinizde bir devralma hiyerarşisi uygular ve sonra Üst (temel) ve Alt (türetilmiş) varlıklar için CUD saklı yordamlarını eşlerseniz, Alt değişiklikleri kaydetmek yalnızca Alt öğesinin saklı yordamlarını çağırır, üst öğesinin saklı yordam çağrılarını tetiklemez.

Ö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 CUDSProcsSample girin.
  • Tamam'ı seçin.

Model Oluşturma

  • Çözüm Gezgini proje adına 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 CUDSProcs.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, Tablolar düğümü altında Kişi tablosunu seçin.

  • Ayrıca Saklı Yordamlar ve İşlevler düğümü altında aşağıdaki saklı yordamları seçin: DeletePerson, InsertPerson ve UpdatePerson.

  • 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 varlık modeline aktar seçeneği varsayılan olarak denetlenmektedir. Bu örnekte varlık türlerini ekleyen, güncelleştiren ve silecek saklı yordamlarımız olduğundan, bunları içeri aktarmak istemiyoruz ve bu onay kutusunun işaretini kaldıracağız.

    Import S Procs

  • Finish (Son) düğmesine tıklayın. Modelinizi düzenlemek için bir tasarım yüzeyi sağlayan EF Tasarım Aracı görüntülenir.

Kişi Varlığını Saklı Yordamlarla Eşleme

  • Kişi varlık türüne sağ tıklayın ve Saklı Yordam Eşlemesi'ni seçin.

  • Saklı yordam eşlemeleri Eşleme Ayrıntıları penceresinde görüntülenir.

  • İşlev Ekle'yi seçin'e tıklayın<.> alanı, kavramsal modeldeki varlık türlerine eşlenebilen depolama modelindeki saklı yordamların açılan listesi haline gelir. Açılan listeden EklePerson'ı seçin.

  • Saklı yordam parametreleri ve varlık özellikleri arasındaki varsayılan eşlemeler görüntülenir. Okların eşleme yönünü gösterdiğine dikkat edin: Özellik değerleri saklı yordam parametrelerine sağlanır.

  • Sonuç Bağlaması Ekle'ye tıklayın<.>

  • InsertPerson saklı yordamı tarafından döndürülen parametrenin adı olan NewPersonID yazın. Baştaki veya sondaki boşlukları yazmamaya dikkat edin.

  • Enter'a basın.

  • Varsayılan olarak NewPersonID, PersonID varlık anahtarıyla eşlenir. Bir okun eşlemenin yönünü gösterdiğine dikkat edin: Sonuç sütununun değeri özelliğine sağlanır.

    Mapping Details

  • Güncelleştirme İşlevi Seç'e tıklayın <ve açılan listeden UpdatePerson'ı seçin.>

  • Saklı yordam parametreleri ve varlık özellikleri arasındaki varsayılan eşlemeler görüntülenir.

  • İşlev Sil'i seçin'e tıklayın <ve açılan listeden SilPerson'ı seçin.>

  • Saklı yordam parametreleri ve varlık özellikleri arasındaki varsayılan eşlemeler görüntülenir.

Kişi varlık türünün ekleme, güncelleştirme ve silme işlemleri artık saklı yordamlarla eşlenir.

Saklı yordamlarla bir varlığı güncelleştirirken veya silerken eşzamanlılık denetimini etkinleştirmek istiyorsanız, aşağıdaki seçeneklerden birini kullanın:

  • Saklı yordamdan etkilenen satır sayısını döndürmek için OUTPUT parametresini kullanın ve parametre adının yanındaki Etkilenen Satırlar Parametresi onay kutusunu işaretleyin. İşlem çağrıldığında döndürülen değer sıfırsa, bir OptimisticConcurrencyException oluşturulur.
  • Eşzamanlılık denetimi için kullanmak istediğiniz özelliğin yanındaki Özgün Değer Kullan onay kutusunu işaretleyin. Bir güncelleştirme denendiğinde, veritabanından özgün olarak okunan özelliğin değeri, veritabanına geri veri yazarken kullanılır. Değer veritabanındaki değerle eşleşmiyorsa, bir OptimisticConcurrencyException oluşturulur.

Modeli Kullanma

Main yönteminin tanımlandığı Program.cs dosyasını açın. Main işlevine aşağıdaki kodu ekleyin.

Kod yeni bir Person nesnesi oluşturur, sonra nesneyi güncelleştirir ve son olarak nesneyi siler.

    using (var context = new SchoolEntities())
    {
        var newInstructor = new Person
        {
            FirstName = "Robyn",
            LastName = "Martin",
            HireDate = DateTime.Now,
            Discriminator = "Instructor"
        }

        // Add the new object to the context.
        context.People.Add(newInstructor);

        Console.WriteLine("Added {0} {1} to the context.",
            newInstructor.FirstName, newInstructor.LastName);

        Console.WriteLine("Before SaveChanges, the PersonID is: {0}",
            newInstructor.PersonID);

        // SaveChanges will call the InsertPerson sproc.  
        // The PersonID property will be assigned the value
        // returned by the sproc.
        context.SaveChanges();

        Console.WriteLine("After SaveChanges, the PersonID is: {0}",
            newInstructor.PersonID);

        // Modify the object and call SaveChanges.
        // This time, the UpdatePerson will be called.
        newInstructor.FirstName = "Rachel";
        context.SaveChanges();

        // Remove the object from the context and call SaveChanges.
        // The DeletePerson sproc will be called.
        context.People.Remove(newInstructor);
        context.SaveChanges();

        Person deletedInstructor = context.People.
            Where(p => p.PersonID == newInstructor.PersonID).
            FirstOrDefault();

        if (deletedInstructor == null)
            Console.WriteLine("A person with PersonID {0} was deleted.",
                newInstructor.PersonID);
    }
  • Uygulamayı derleyin ve çalıştırın. Program aşağıdaki çıkışı * üretir

Dekont

PersonID, sunucu tarafından otomatik olarak oluşturulur, bu nedenle büyük olasılıkla farklı bir sayı görürsünüz*

Added Robyn Martin to the context.
Before SaveChanges, the PersonID is: 0
After SaveChanges, the PersonID is: 51
A person with PersonID 51 was deleted.

Visual Studio'nun Ultimate sürümüyle çalışıyorsanız, yürütülen SQL deyimlerini görmek için hata ayıklayıcı ile Intellitrace kullanabilirsiniz.

Debug With Intellitrace