Я хочу обрабатывать параллельный доступ к моему веб-приложению ASP.NET MVC, поэтому я добавил timestamp
аннотации мой класс, как следующие: -Как я могу определить список привязки Bind для объекта, если я передаю объект как параметр моему методу действия редактирования
[MetadataType(typeof(Assessment_Validation))]
[Bind(Include = "Date, Title")]
public partial class Assessment {}
&
public class Assessment_Validation : IValidatableObject
{ public DateTime Date { get; set; }
[Required(ErrorMessage = " Assessment Title is Rquired")]
public String Title { get; set; }
[Timestamp]
public Byte[] Timestamp { get; set; } }
Тогда на методе действий я включил folloiwng: -
[HttpPost]
public ActionResult Edit(Assessment a)
{ try
{
if (ModelState.IsValid)
{
elearningrepository.UpdateAssessment(a);
elearningrepository.Save();
return RedirectToAction("Details", new { id = a.AssessmentID });
}
}
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.Single();
var clientValues = (Assessment)entry.Entity;
ModelState.AddModelError(string.Empty, "The record you attempted to edit was"
+ "modified by another user after you got the original value.");
}
catch (DataException)
{
ModelState.AddModelError(string.Empty, "Unable to save changes. Try again, and if the problem persists contact your system administrator.");
}
return View(a);}
и, наконец, elearningrepository.UpdateAssessment(a)
: -
public void UpdateAssessment(Assessment a)
{
entities1.Entry(a).State = EntityState.Modified;
}
выше всегда будет возвращать DbUpdateConcurrencyException
, даже если нет двух пользователей не редактировать один и тот же объект, я думаю, что это связано с [Bind(Include = "Date, Title")]
о частичном классе. Итак, как я могу передать объект в качестве аргумента в методе действия редактирования и в то же время определить список Bind
для объекта ?. problme также, если я обновить мой метод действия (чтобы не иметь объект в качестве параметра), как не следующее: -, то DbUpdateConcurrencyException
будет никогда не будет поднят !!!!: -
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
Assessment a = elearningrepository.GetAssessment(id);
try
{
if (TryUpdateModel(a))
{
elearningrepository.UpdateAssessment(a);
elearningrepository.Save();
return RedirectToAction("Details", new { id = a.AssessmentID });
}
}
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.Single();
var clientValues = (Assessment)entry.Entity;
ModelState.AddModelError(string.Empty, "The record you attempted to edit was"
+ "modified by another user after you got the original value.");
}
catch (DataException)
{ ModelState.AddModelError(string.Empty, "Unable to save changes. Try again, and if the problem persists contact your system administrator.");
}return View(a);
так, как я могу решить эта проблема?