2016-05-07 18 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来解决我的问题。