Я хочу обработать параллельный доступ к моему веб-приложению ASP.NET MVC, поэтому я добавил в свой класс аннотацию timestamp
следующим образом: -
[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; } }
Затем в методе Action я включил следующее: -
[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
для объекта ?.
Проблема также, если я обновлю свой метод действия (чтобы не иметь объекта в качестве параметра) следующим образом: -, тогда 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);
так как я могу решить эту проблему?