Aracılığıyla paylaş


Karmaşık Türler - EF Tasarım Aracı

Bu konuda, karmaşık türlerin Entity Framework Tasarım Aracı (EF Tasarım Aracı) ile nasıl eşleneceği ve karmaşık tür özellikleri içeren varlıkların nasıl sorguleneceği gösterilmektedir.

Aşağıdaki görüntüde EF Tasarım Aracı ile çalışırken kullanılan ana pencereler gösterilmektedir.

EF Designer

Dekont

Kavramsal modeli oluşturduğunuzda, eşlenmemiş varlıklar ve ilişkilendirmeler hakkındaki uyarılar Hata Listesi'nde görünebilir. Bu uyarıları yoksayabilirsiniz, çünkü modelin veritabanını oluşturmayı seçtikten sonra hatalar gider.

Karmaşık Tür nedir?

Karmaşık türler, varlıklar içinde skaler özelliklerin düzenlenmesini sağlayan varlık türlerinin skaler olmayan özellikleridir. Varlıklar gibi karmaşık türler de skaler özelliklerden veya diğer karmaşık tür özelliklerinden oluşur.

Karmaşık türleri temsil eden nesnelerle çalışırken aşağıdakilere dikkat edin:

  • Karmaşık türlerin anahtarları yoktur ve bu nedenle bağımsız olarak mevcut olamaz. Karmaşık türler yalnızca varlık türlerinin veya diğer karmaşık türlerin özellikleri olarak bulunabilir.
  • Karmaşık türler ilişkilendirmelere katılamaz ve gezinti özellikleri içeremez.
  • Karmaşık tür özellikleri null olamaz. DbContext.SaveChanges çağrıldığında ve null bir karmaşık nesneyle karşılaşıldığında **InvalidOperationException ** oluşur. Karmaşık nesnelerin skaler özellikleri null olabilir.
  • Karmaşık türler diğer karmaşık türlerden devralamaz.
  • Karmaşık türü sınıf olarak tanımlamanız gerekir. 
  • DBContext.DetectChanges çağrıldığında EF karmaşık tür nesnesinde üyelere yapılan değişiklikleri algılar . Entity Framework, aşağıdaki üyeler çağrıldığında DetectChanges'i otomatik olarak çağırır: DbSet.Find, DbSet.Local, DbSet.Remove, DbSet.Add, DbSet.Attach, DbContext.SaveChanges, DbContext.GetValidationErrors, DbContext.Entry, DbChangeTracker.Entries.

Varlığın Özelliklerini Yeni Karmaşık Türde Yeniden Düzenleme

Kavramsal modelinizde zaten bir varlığınız varsa, bazı özellikleri karmaşık tür özelliğinde yeniden düzenlemeniz gerekebilir.

Tasarımcı yüzeyinde, bir varlığın bir veya daha fazla özelliğini (gezinti özellikleri hariç) seçin, sonra sağ tıklayıp Yeniden Düzenle -> Yeni Karmaşık Türe Taşı'yı seçin.

Refactor Into New Complex Type

Model Tarayıcısı'na seçili özelliklere sahip yeni bir karmaşık tür eklenir. Karmaşık türe varsayılan bir ad verilir.

Yeni oluşturulan türün karmaşık özelliği seçilen özelliklerin yerini alır. Tüm özellik eşlemeleri korunur.

Refactor Into New Complex Type 2

Yeni Karmaşık Tür Oluşturma

Ayrıca, var olan bir varlığın özelliklerini içermeyen yeni bir karmaşık tür de oluşturabilirsiniz.

Model Tarayıcısı'nda Karmaşık Türler klasörüne sağ tıklayın, EkleYeni Karmaşık Tür'e gidin .... Alternatif olarak, Karmaşık Türler klasörünü seçip klavyenizdeki Ekle tuşuna basabilirsiniz.

Add New Complex type

Klasöre varsayılan adla yeni bir karmaşık tür eklenir. Artık türüne özellikler ekleyebilirsiniz.

Karmaşık Türe Özellikler Ekleme

Karmaşık türün özellikleri skaler türler veya mevcut karmaşık türler olabilir. Ancak, karmaşık tür özellikleri döngüsel başvurulara sahip olamaz. Örneğin, onsiteCourseDetails karmaşık türü onsiteCourseDetails karmaşık türünde bir özelliğe sahip olamaz.

Karmaşık bir türe aşağıda listelenen yollardan herhangi birinde özellik ekleyebilirsiniz.

  • Model Tarayıcısı'nda karmaşık bir türe sağ tıklayın, Ekle'nin üzerine gelin, ardından Skaler Özelliği veya Karmaşık Özellik'in üzerine gelin ve istediğiniz özellik türünü seçin. Alternatif olarak, karmaşık bir tür seçebilir ve ardından klavyenizdeki Ekle tuşuna basabilirsiniz.

    Add Properties to Complex Type

    Karmaşık türe varsayılan adla yeni bir özellik eklenir.

  • VEYA -

  • EF Tasarım Aracı yüzeyinde bir varlık özelliğine sağ tıklayın ve Kopyala'yı seçin, ardından Model Tarayıcısı'nda karmaşık türe sağ tıklayın ve Yapıştır'ı seçin.

Karmaşık Türü Yeniden Adlandırma

Karmaşık bir türü yeniden adlandırdığınızda, türe yapılan tüm başvurular proje boyunca güncelleştirilir.

  • Model Tarayıcısı'nda karmaşık bir türe yavaşça çift tıklayın. Ad seçilir ve düzenleme modunda olur.

  • VEYA -

  • Model Tarayıcısı'nda karmaşık bir türe sağ tıklayın ve Yeniden Adlandır'ı seçin.

  • VEYA -

  • Model Tarayıcısı'nda karmaşık bir tür seçin ve F2 tuşuna basın.

  • VEYA -

  • Model Tarayıcısı'nda karmaşık bir türe sağ tıklayın ve Özellikler'i seçin. Özellikler penceresinde adı düzenleyin.

Var Olan Bir Karmaşık Türü Bir Varlığa Ekleme ve Özelliklerini Tablo Sütunlarına Eşleme

  1. Bir varlığa sağ tıklayın, Yeni Ekle'nin üzerine gelin ve Karmaşık Özellik'i seçin. Varlığa varsayılan ada sahip karmaşık tür özelliği eklenir. Özelliğine varsayılan bir tür (mevcut karmaşık türlerden seçilen) atanır.

  2. özellikler penceresindeki özelliğine istediğiniz türü atayın. Bir varlığa karmaşık tür özelliği ekledikten sonra özelliklerini tablo sütunlarına eşlemeniz gerekir.

  3. Tasarım yüzeyinde veya Model Tarayıcısı'nda bir varlık türüne sağ tıklayın ve Tablo Eşlemeleri'ni seçin. Tablo eşlemeleri Eşleme Ayrıntıları penceresinde görüntülenir.

  4. Haritalar Tablo Adı> düğümüne <genişletin. Sütun Eşlemeleri düğümü görüntülenir.

  5. Sütun Eşlemeleri düğümünü genişletin. Tablodaki tüm sütunların listesi görüntülenir. Sütunların eşlendiği varsayılan özellikler (varsa), Değer/Özellik başlığı altında listelenir.

  6. Eşlemek istediğiniz sütunu seçin ve ilgili Değer/Özellik alanına sağ tıklayın. Tüm skaler özelliklerin açılan listesi görüntülenir.

  7. Uygun özelliği seçin.

    Map Complex Type

  8. Her tablo sütunu için 6. ve 7. adımları yineleyin.

Dekont

Sütun eşlemesini silmek için, eşlemek istediğiniz sütunu seçin ve ardından Değer/Özellik alanına tıklayın. Ardından, açılan listeden Sil'i seçin.

İşlev İçeri Aktarmayı Karmaşık Bir Türe Eşleme

İşlev içeri aktarma işlemleri saklı yordamları temel alır. İşlev içeri aktarma işlemini karmaşık bir türe eşlemek için, karşılık gelen saklı yordam tarafından döndürülen sütunların sayıdaki karmaşık türün özellikleriyle eşleşmesi ve özellik türleriyle uyumlu depolama türlerine sahip olması gerekir.

  • Karmaşık bir türe eşlemek istediğiniz içeri aktarılan bir işleve çift tıklayın.

    Function Imports

  • Yeni işlev içeri aktarma ayarlarını aşağıdaki gibi doldurun:

    • Saklı Yordam Adı alanında işlev içeri aktarması oluşturduğunuz saklı yordamı belirtin. Bu alan, depolama modelindeki tüm saklı yordamları görüntüleyen bir açılan listedir.

    • İşlev İçeri Aktarma Adı alanında işlev içeri aktarmanın adını belirtin.

    • Dönüş türü olarak Karmaşık'ı seçin ve ardından açılan listeden uygun türü seçerek belirli karmaşık dönüş türünü belirtin.

      Edit Function Import

  • Tamam'a tıklayın. İşlev içeri aktarma girişi kavramsal modelde oluşturulur.

İşlev İçeri Aktarma için Sütun Eşlemeyi Özelleştirme

  • Model Tarayıcısı'nda işlev içeri aktarma işlemine sağ tıklayın ve İşlev İçeri Aktarma Eşlemesi'ni seçin. Eşleme Ayrıntıları penceresi görüntülenir ve işlev içeri aktarma için varsayılan eşlemeyi gösterir. Oklar, sütun değerleriyle özellik değerleri arasındaki eşlemeleri gösterir. Varsayılan olarak, sütun adlarının karmaşık türün özellik adları ile aynı olduğu varsayılır. Varsayılan sütun adları gri metinde görünür.
  • Gerekirse, sütun adlarını işlev içeri aktarma işlemine karşılık gelen saklı yordam tarafından döndürülen sütun adlarıyla eşleşecek şekilde değiştirin.

Karmaşık Tür Silme

Karmaşık bir türü sildiğinizde, tür kavramsal modelden silinir ve türün tüm örnekleri için eşlemeler silinir. Ancak, türüne başvurular güncelleştirilmez. Örneğin, bir varlığın ComplexType1 türünde karmaşık bir tür özelliği varsa ve Model Tarayıcısı'nda ComplexType1 silinirse, ilgili varlık özelliği güncelleştirilmez. Model, silinmiş bir karmaşık türe başvuran bir varlık içerdiğinden doğrulamaz. Varlık Tasarım Aracı kullanarak silinen karmaşık türlerin başvurularını güncelleştirebilir veya silebilirsiniz.

  • Model Tarayıcısı'nda karmaşık bir türe sağ tıklayın ve Sil'i seçin.

  • VEYA -

  • Model Tarayıcısı'nda karmaşık bir tür seçin ve klavyenizdeki Delete tuşuna basın.

Karmaşık Tür Özelliklerini İçeren Varlıklar için Sorgu

Aşağıdaki kod, karmaşık tür özelliği içeren varlık türü nesnelerinin koleksiyonunu döndüren bir sorgunun nasıl yürütüldüğünü gösterir.

    using (SchoolEntities context = new SchoolEntities())
    {
        var courses =
            from c in context.OnsiteCourses
            order by c.Details.Time
            select c;

        foreach (var c in courses)
        {
            Console.WriteLine("Time: " + c.Details.Time);
            Console.WriteLine("Days: " + c.Details.Days);
            Console.WriteLine("Location: " + c.Details.Location);
        }
    }