2012-03-15 1 views
0

Я хочу обрабатывать параллельный доступ к моему веб-приложению 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); 

так, как я могу решить эта проблема?

ответ