2012-07-29 18 views
24

Olası Çoğalt:
Entity Framework 4 - AddObject vs AttachAttach(), Entity Framework'de tam olarak ne yapar?

Özellikle modellerini manipüle zaman birkaç kez takmak kullanımını gördük. sadece EntityFrameworks bir kayıt karşı UPDATE çalışır, ama aynı zamanda o DELETE tablolarda kullanılan bakınız gibi bağlamda itibaren

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 

görünüyor. Bu yüzden sadece veritabanına bir işaretçi aldığını varsayabilir miyim?

Birisi bana doğru yönde işaret edebilirdi, bir süredir googlededim ve ben boş gelmiyorken, ne yaptığının iyi bir özetini bulamıyorum (genel ve dahili olarak)).

+0

bakınız [Bu soru] (http://stackoverflow.com/q/3920111/406903) ve 'Attach' ve 'AddObject' hakkında yanıt kabul edildi. – hmqcnoesy

+1

Teşekkürler @hmqcnoesy bunu kaçırdı :) yinelenen olarak kapatmak için oy verdi. –

cevap

36

Yayınladığınız ilgi noktası kodu hiçbir şey yapmaz gibi tüm yapar

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 

izleme grafiğine varlığı tutturmak varlığa hiçbir değişiklik yapma ve kaydedin olduğunu. kaydetmeden önce göz ardı edilir yükledikleriyle nesneye yapılan

tüm değişiklikler

aslında bir özellik ie güncellenen eğer daha ilginç olurdu Ne:

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    client.Name = "Bob"; 
    context.SaveChanges(); 
} 
+1

İlginç, sadece eklendikten sonra değiştiğini görüyorum. Küçük bir teğet için özür dilerim, zaten var olan bir kaydı düzenlemek için güzel bir temiz yol var mı, zaten değiştirilmiş bir sınıfınız var (ID de aynıdır)? "Değiştirilen her şeyi güncelle" yöntemi mi? –

+1

Bu, değişim izleme yöntemine biraz bağlıdır, ancak anlık görüntü izleme ile (ki bunu neredeyse kesin bir şekilde kullanırsınız) bunu yapmanın en iyi yolu, kurumdaki kirli bayrağın ayarlanmasıyla, bunun nasıl yapılacağına değinmek, http: // stackoverflow.com/a/6829996/1070291, ancak muhtemelen bu varlık üzerinde değil varlık üzerinde yapmak istiyorum –

+18

@JohnMitchell Var olan bir varlık ekledikten sonra değiştirilmiş durumunu değiştirebilir, örneğin context.Entry (client) .State = EntityState.Modified; ' – devlord