2017-06-29 69 views
0

我需要通過實體框架和Windows服務更新表內的一組記錄。我通常沒有任何錯誤,但現在我得到以下錯誤,EntityValidationErrors EF6更新記錄

驗證失敗的一個或多個實體。有關更多詳細信息,請參閱「EntityValidationErrors」屬性。

當我檢查錯誤Nic其中有VARCHAR(12)屬性是主要原因。在使用VARCHAR(10)創建了Nic列之前,我將其更新爲VARCHAR(12)。但是,當我嘗試輸入字符串長度爲12的值時,儘管表和模型已設置爲12個字符,但我仍然收到了該錯誤。

有人可以知道這種奇怪行爲的原因嗎?

 public void UpdateCustomers() 
    { 
     try 
     { 
      CustomerLoyaltyContext newContext = new CustomerLoyaltyContext(); 
      List<Customer_Update> customers = this.GetUpdatedCustomers(); 
      foreach (var cu in customers) 
      { 
       var cst = newContext.Customers.Where(a => a.MembershipNumber == cu.MembershipNumber).FirstOrDefault(); 
       if (cst != null) 
       { 
        cst.MobileNumber = cu.MobileNumber; 
        //updating other records including Nic 

        newContext.Customers.Add(cst); 
        newContext.Entry(cst).State = EntityState.Modified; 
        newContext.SaveChanges(); 

        tus.WriteToFile("User by mobile" + "[ " + cu.MobileNumber + " ]" + " Updated : [ " + cu.MembershipNumber + " ]\n"); 
       } 
       else 
       { 
        tus.WriteToFile("User by mobile" + "[ " + cu.MobileNumber + " ]" + " not found : [ " + cu.MembershipNumber + " ]\n"); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      tus.WriteToFile("Error Occured"); 
     } 
    } 

我的模型,

[MaxLength(12)] 
public string Nic{get;set;} 

和我的數據庫尼克列具有相同的屬性也

我嘗試下面的代碼我OnModelCreating方法,但沒有得到任何好轉,

Database.SetInitializer<MyContext>(null); 

在創作記錄我沒有問題。有人可以幫助我嗎?

+1

更改模型後,你有'$ update-database'嗎? – pijemcolu

+0

是的,但目前尚未實施。我的客戶端不允許將服務器連接到互聯網,並且由於安全考慮,不允許安裝第三方應用程序。因此,我正在對本地安裝程序進行所有遷移,並替換客戶端服務器中的文件和整個數據庫。 – thilanka1989

回答

1

我認爲你的問題是由於你的數據庫和你的模型不匹配,嘗試更新你的EF模型,一切都應該沒問題。

希望它有幫助。

+0

它有助於我的本地設置。從本地安裝遷移後,必須將託管服務器數據庫替換爲本地數據庫。感謝您的答覆。 – thilanka1989