2016-05-07 22 views
0

如何防止context.savechangs從所需的屬性ModelState.Remove並不妨礙context.savechangs從拋出錯誤

我有這樣的代碼編寫消息

引發錯誤,這是控制器端的方法

public string DraftMessage(message draftMessage, string status, HttpPostedFileBase[] files = null) 
    { 
     ModelState.Remove("Title"); 
     ModelState.Remove("Body"); 
     if (ModelState.IsValid) 
     { 
      return new MessageActions().DraftMessage(draftMessage, status); 
     } 
     return "validation error"; 
    } 

,這是該模型方法

public string DraftMessage(message draftMessage, string status) 
    { 
     if (status == "new") 
     { 
      draftMessage = new message(); 
      draftMessage.Status = "DR"; 
      draftMessage.DateOfCreation = DateTime.UtcNow; 
      draftMessage.C_From = CurrentUser.Id; 
      context.messages.Add(draftMessage); 
      draftMessage.To = new int[2]; 
      foreach (int receiverId in draftMessage.To) 
      { 
       if (context.users.Any(user => user.user_id == receiverId && (user.DepartmentOfTheUser.Company == CurrentUser.Company || user.DepartmentOfTheUser.CompanyOfTheDepartment.CompanyCustomers.Any(cus => cus.customer_of == CurrentUser.Company) || user.DepartmentOfTheUser.CompanyOfTheDepartment.CompanySuppliers.Any(supp => supp.supplier_of == CurrentUser.Company)))) 
       { 
        context.MessageReceiversConnectors.Add(new MessageReceiversConnector() { MessageId = draftMessage.id, ReceiverId = receiverId, MessageStatus = "DR" }); 
       } 
      } 
     } 

     context.SaveChanges(); 

     return "draft"; 
    } 

我用的EntityFramework創建同一實體交換數據,我用把用於驗證所需要的屬性,看看下面

[Required(ErrorMessage="This field is required")]   
    public int[] To { get; set; } 

    [Required(ErrorMessage = "This field is required")]   
    public string Title { get; set; } 

    [Required(ErrorMessage = "This field is required")]   
    public string Body { get; set; } 

ModelState.Remove代碼工作在控制器端,但是當我到達它在context.savechanges上拋出異常的模型。

有什麼辦法可以解決這個問題。

+0

您應該改用視圖模型。 –

+0

是否有其他方法,這將需要很長時間來更改我的代碼以適應新的更改 – Haidar

回答

0

我通過將此選項context.Configuration.ValidateOnSaveEnabled設置爲false來解決我的問題。