Bir EntityObject EntityKey ayarlamam gerekir. Onun türünü ve kimlik değerini biliyorum. Veritabanını gereksiz yere sorgulamak istemiyorum.EntityKey ve ApplyPropertyChanges()
Bu çalışır ...
//
// POST: /Department/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
Model.EntityKey = (from Department d in db.Department
where d.Id == id
select d).FirstOrDefault().EntityKey;
db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model);
db.SaveChanges();
return RedirectToAction("Index");
}
Bu başarısız ...
//
// POST: /Department/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
String EntitySetName = db.DefaultContainerName + "." + Model.GetType().Name;
Model.EntityKey = new System.Data.EntityKey(EntitySetName, "Id", Model.Id);
db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model);
db.SaveChanges();
return RedirectToAction("Index");
}
ApplyPropertyChanges() çizgisi bu durumla başarısız:
ObjectStateManager değil , birile bir ObjectStateEntry içerir 'Sample.Models.Department' türündeki bir nesneye başvuru.
İki EntityKey eşittir. İkinci kod bloğu neden başarısız? Bunu nasıl düzeltebilirim?
+1. Bu güzeldi! =) Tablonun çoklu kolon PK kullanıyorsa yöntem nasıl değişmeli? –
Sen anahtar belirtmek için KeyValuePair bir IEnumerable aldı uzatma yönteminin bir aşırı yapmak gerekir ve sonra EntityKey karşılık gelen yapıcı aşırı derim. Stype güvenliğini korumak ve KeyValuePair'inizdeki dizelerden geçmekten kaçınmak için, tuşlara yerleştirilecek değerlerle birlikte bir 'anahtar bulma' delegesi dizisi geçirebilirsiniz. –
bu büyük cevap dayanarak, birazcık iyileşti ve ben de bir cevap olarak yayınladığı, bunun dışında kendi küçük yöntemini yaptı. Her türlü nesne nesnesinde çalışır ve delegeleri kullanmaz. –