2013-02-23 43 views
22
[HttpPost] 
public ActionResult Edit(Movie movie) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(movie).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(movie); 
} 

Bu eylem, bir film modeli alır ve veritabanında güncelleştirir.
Ama nasıl olduğunu anlayamıyorum.
movie nesnesi db'ye eklenmemiş, bu nedenle varlık çerçevesi db'deki hangi satırın nasıl güncelleneceğini nasıl biliyor?DBContext.Entry ne yapar?

Giriş yönteminin onunla bir ilgisi olduğundan eminim, ancak bu yöntemin ne yaptığını gerçekten bilmiyorum. Bilgiyi sağladığını okudum ama bir girişin State'u değiştirerek, DBContext tarafından nasıl bağlandığını ve izlendiğini anlayamıyorum.

cevap

21

sadece aksi takdirde birincil anahtarı kullanarak varlık aramak ve daha sonra değerini düzenlemek ve kaydetmek zorunda kalacak DataContext varlık verdiği ..

Eğer zaten var biliyorum bir varlık varsa Veritabanında ancak hangi değişikliklerin yapıldığına bağlı olarak, içeriği bağlamı anlatabilir ve durumunu Modifiye olarak belirtebilirsiniz. http://msdn.microsoft.com/en-US/data/jj592676

+0

Fakat bunun için var [Ekle] (http://msdn.microsoft.com/en-us/library/system.data.entity.dbset.attach (v = vs.103) .aspx) yöntem. –

+0

Anladım. Teşekkür ederim. :) –

+0

Dolayısıyla, bu yöntem, varlık sınıfının özelliklerinden hangisinin anahtar olduğunu bilir ve daha sonra içsel olarak anahtar (lar) tarafından varlığı almak ve onu eklemek için bir aramayı formüle edebilir. Sağ? Eğer öyleyse, bu harika. –