2011-04-12 14 views
19

aşağıdaki modele sahibim.EF Code İlk Üst Alt-Çocuk eklemeleri kimlik sütunlarıyla

class Parent 
{ 
    int ParentId (identity column) { get; set; } 
    string ParentName { get; set; } 
    virtual ICollection<Child> Children { get; set; } 
} 

class Child 
{ 
    int ChildId (identity column) { get; set; } 
    string ChildName { get; set; } 
    int ParentID { get ; set; } //foreign key to Parent(ParentID) 
} 

Ebeveynime ve çocuğuma tek seferde birkaç satır nasıl eklenir? Temel olarak ebeveyn üzerinde oluşturulan kimliği almak istiyorum (ebeveyne bir satır eklediğimi söyleyin) ve bu değerle alt satırlar ekleyeyim mi? İlk olarak Kod nasıl kullanılır?

cevap

37

Child satırları eklemek için Parent numaralı değerin ne alacağı konusunda endişelenmemelisiniz. Bu yeterli olmalı: Her zaman iki kere SaveChanges() çağırabilir bir Child varlık takmadan önce gerçekten kimliği gerekiyorsa bu yüzden

Kayıt için
var parent = new Parent 
{ 
    // fill other properties 

    Children = new List<Child>() 
} 

parent.Children.add(new Child { /*fill values */); 

dbContext.Parents.Add(parent); // whatever your context is named 
dbContext.SaveChanges(); 

, kimlikleri, SaveChanges() çağrıldıktan sonra atanacaktır.

Yine de bu gerekli olmamalı. Bu arada

, ben Child den Parent bir navigasyon özelliği yabancı anahtar özellik yapım öneriyoruz, şöyle Child sınıf görünecektir: Hep olmadan doğrudan Çocuğun ebeveyni erişebilir

class Child 
{ 
    public int ChildId { get; set; } // identity column 
    public string ChildName { get; set; } 
    public virtual Parent Parent { get ; set; } //foreign key to Parent 
} 

Bu şekilde veritabanından açıkça almanız gerekiyor (tembel yüklü olacak).

+0

'SaveChanges' ve' dbContext.Parents.Add (parent) 'demek istediniz mi? –

+0

@Ladislav - Evet ve evet, cevabımı düzelttim, teşekkürler. Bunu yanıtladığımda kendi İş Birimi uygulamasına bakıyordum ve dikkatimi dağıttım/kafam karıştı :) –

+1

Varlık çerçevesi ilk ekleri Veli ve sonra çocuklar. 'ebeveyne ekle -> yeni_created_parent_id' ve sonra da çocuk (..., parent_id) değerlerine eklenir (..._ new_created_parent_id). Bunu test ettim ve çalıştığını söylediğin gibi, ama bu davranışı belirttiği belgeleri arıyorum. Yoksa bunu belgelere eklemek çok mantıklı mıdır (msdn)? – broadband