2015-12-15 5 views
2
[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "StaffID,StartDate,EndDate,LeaveType,NoOfDays,AppStatus,HiddenID,LeaveReason,UpdateDate,UpdatedBy")] CurrentApplication currentApplication, Staff staff) 
    { 
     if (ModelState.IsValid) 
     { 
      db.CurrentApplications.Add(currentApplication); 
      currentApplication.UpdateDate = System.DateTime.Now; 
      currentApplication.AppStatus = "PENDING"; 
      currentApplication.UpdatedBy = User.Identity.Name; 

      var model = new LeaveIndexData(); 
      var userEmail = User.Identity.Name; 
      model.Staffs = db.Staffs.Single(i => i.Email == userEmail); 
      var userID = model.Staffs.StaffID; 
      currentApplication.StaffID = userID; 

      //decimal period = (currentApplication.StartDate.Date - currentApplication.EndDate.Date).TotalDays; 
      //currentApplication.NoOfDays = period; 

      TimeSpan tSpan = (currentApplication.EndDate.Value).Subtract(currentApplication.StartDate.Value); 
      currentApplication.NoOfDays = tSpan.Days + 1; 

      db.Staffs.Add(staff); 
      staff.BalanceLeave = staff.BalanceLeave - currentApplication.NoOfDays; 

      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(currentApplication); 
    } 

Моя страница выше дает мне ошибку Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. Это было прекрасно и прекрасно работает, пока я не добавил эти две линии:MVC Проверка не для одного или нескольких объектов

db.Staffs.Add (персонал) ;

staff.BalanceLeave = staff.BalanceLeave - currentApplication.NoOfDays;

Я думал, что было бы хорошо сделать это таким образом, так как я добавил в db.Staffs так же, как и для CurrentApplications, но неожиданно дал мне ошибку. Я не уверен, как это решить.

модель My Staff выглядит следующим образом:

public partial class Staff 
{ 
    public int StaffID { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public Nullable<decimal> AllocatedLeave { get; set; } 
    public Nullable<decimal> BalanceLeave { get; set; } 
} 

Я знаю, что есть подобные вопросы, но те о том, как найти ошибку. Я знаю, что такое ошибка, но я не могу понять, почему у меня это получается, потому что это кажется правильным для меня. Пожалуйста помоги! Спасибо :)

+0

Вы можете увидеть 'EntityValidationErrors' больше деталей о том, что происходит? Это будет намного лучше (чем догадка), чтобы увидеть, что происходит не так. – adricadar

+0

Проверьте ошибку в Quick Watch с помощью этого '((System.Data.Entity.Validation.DbEntityValidationException) ex) .EntityValidationErrors'. Здесь 'ex' - объект исключения. –

+0

@RahulNikate Я получил ошибку конца выражения, ожидаемого на двух проблемных строках, о которых я упомянул выше ._. –

ответ

0

Я думаю, что это поможет вам в том, что именно не так с вашей проверкой, и вы также можете вывести пользователю какое-нибудь человекообразное сообщение.

try 
    { 
     Db.SaveChanges(); 
    } 
    catch(DbEntityValidationException ex){ 
     foreach(var property in ex.EntityValidationErrors) 
     { 

     string entityName=eve.Entry.Entity.GetType().Name; 

     foreach(var error in property.ValidationErrors) 
     { 
      Debug.WriteLine("Table name: "+entityName+" "+ error.PropertyName+" : "+error.ErrorMessage); 
     } 
    } 
} 
0

Для просмотра EntityValidationErrors добавить следующее выражение смотреть в окно wacth:

((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors