2010-12-08 25 views
8

Bir koleksiyon nesnesi olan childs özelliğine sahip ana nesnem var. yani. Parent.Childs Bu EF nesnesini WCF ile açığa çıkarıyorum. Başka bir şekilde ebeveynin Fatura (ana) ve LineItems (childs) durumunda olduğu gibi birden fazla çocuğu olabilir.Varlık Çerçevesi - Nesne listesinin tamamı alınmadan alt nesneye başvuru ekleyin.

İstemci tarafı, bir Child nesnesine nasıl başvuruda bulunabilir ve Childs koleksiyonuna hizmete girmeden ve tüm çocuk listesine girip, eşleşen her alt nesne için el ile Parent.Childs.Add (alt) ayarlayarak nasıl ekleyebilirim.

Parent.Childs = yeni Childs() {yeni Çocuk {childId = 1}, yeni Child {childId = 2}} gibi bir şey yapmak isterim; ve sonra Sunucuya sunucu gönderdiğimde sunucu kimliği = 1 ve id = 2 olan bir çocuğun zaten var olduğunu biliyor ve onu kaldırıyor. Eminim uzaklarda.

EntityKey özelliği hakkında bir şeyler okuyordum ancak nesnelerim istemci tarafında bu özellik yok. o veritabanından yükler kadar varlık varsa

sayesinde

cevap

5
using(var context = new MyEntities()) 
{ 
    var child1 = new Child{ childId = 1 }; 
    context.Children.Attach(child1); 
    var parent = new Parent(); 
    parent.Children.Add(child1); 
    context.SaveChanges(); 
} 
+0

Nesne nesnelerle bir wcf hizmeti aracılığıyla çalışıyorum ve bu nedenle istemci tarafı 'içerik' – David

+0

diye bir şey yok. Bu çözümü denemek için kullanıyorum ve "ObjectStateManager'da aynı anahtarda bir nesne var. ObjectStateManager, aynı anahtarla birden fazla nesneyi izleyemez "Bunu nasıl çözmem gerektiğini bilmiyorum ... Herhangi bir fikrin var mı?" –

+1

@ SimonDugré, bu yinelenen bir anahtar hatası. Aynı anahtara yeni bir nesne eklemeyi denemek yerine, zaten yüklediğiniz nesneyi güncellemeniz gerekir. –

0

Sunucu bilmiyor. Böylece, müşteriye childs ekleyip onları sunucuya gönderdiğinizde, yeni childs, güncellenmiş childs ve silinen childs hakkında da bilgi vermelisiniz. Bu bilgileri içermezseniz, önce DB'den tam varlık grafiğini yüklemeniz ve daha sonra alınan grafiği ve işlem değişikliklerini manuel olarak elle karşılaştırmanız gerekir.

Böyle bir durum için otomatik çözüm, Otomatik izleme varlıkları (STE'ler) olabilir, ancak yine de örneğiniz çalışmaz. STE'ler nesneleri yüklemenizi, istemciye göndermenizi, değiştirmenizi ve geri göndermenizi gerektirir. STE'ler tüm değişiklikleri takip edecektir.

+0

STE'leri kullanıyorum ve şu anda tüm çocukları sunucudan almalıyım, sonra istemci tarafı ekleyebilirim.e. parent.children.add (çocuk) (çocuğun sunucudan aldığım bir tanesi). Bu STE ile bunu yapmanın tek yolu bu gibi geliyor (bu doğru mu?) Sadece parent.children.add istedim (yeni çocuk (childid = 1)) db kaydetmek için gittiği gibi çalışır zaten bir 1 kimliğine sahip olan ve yeni bir tane yaratmayan bir çocuğun olduğunu görecekti. – David