2016-06-13 81 views
0

嘗試執行簡單的linq插入查詢時發生錯誤。實體框架5 Linq插入查詢:操作無效

異常:由於對象的當前狀態,操作無效。

這裏是我的LINQ查詢:

private void addEntry(string hqname, string hqaddress, string hqcity, 
         int hqzip, string hqstate, string hqcountry) 
{ 
    using (var db = new dbcontext()) 
    { 
     try 
     { 
      var dbObj = new dbObj(); 
      dbObj.HQName = hqname; 
      dbObj.HQAddress = hqaddress; 
      dbObj.HQCity = hqcity; 
      dbObj.HQZip = hqzip; 
      dbObj.HQState = hqstate; 
      dbObj.HQCountry = hqcountry; 
      db.tblName.Add(dbObj); 
      db.SaveChanges(); 
     } 
     catch 
     { 
      throw new InvalidOperationException(); 
     } 
    } 
} 

這裏的地方我把這種方法:

addCompanyHeadquarters(tbCompanyName.Text, addressInput.HQAddress, addressInput.HQCity, Convert.ToInt32(addressInput.HQZip), addressInput.HQState, "United States"); 

堆棧跟蹤:

[出現InvalidOperationException:操作無效由於目標的當前狀態。] addComp任何總部(字符串hqname,字符串hqaddress,字符串hqcity,Int32 hqzip,字符串hqstate,字符串hqcountry)在 Button3_Click(Object sender,EventArgs e) System.Web.UI.WebControls.Button.OnClick(EventArgs e)+9692746 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)+12 System.Web.UI。 Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串eventArgument)15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection中POSTDATA)35 System.Web.UI.Page.ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint)3562

我一直在試圖調試一段時間,這個錯誤是真的把我扔了一個循環。我不確定接下來要看什麼。任何提示前進,非常感謝。一些信息:我不得不更新的ID數據庫列自動增量,然後後,我改變了edmx文件StoredGeneratedPattern: True

更新相應的表和列:從葉戈爾Semenenko的意見,我加入改變了例外,我扔給拋出; 扔;: 我的繼承人新的堆棧跟蹤: 實體類型是不是該機型爲當前上下文 的一部分[出現InvalidOperationException:實體類型tblName是不是模型對當前環境的一部分]

System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType) +196 
    System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +38 
    System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +52 
    System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +15 
    System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +64 
    System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) +108 
    System.Data.Entity.DbSet`1.Add(TEntity entity) +42 
    addCompanyHeadquarters(String hqname, String hqaddress, String hqcity, Int32 hqzip, String hqstate, String hqcountry) in 
    Button3_Click(Object sender, EventArgs e) 
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9692746 
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108 
    System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562 
+0

更新ID爲自動增量修復它?另外,你是否錯過了這個對象上的FK關係? –

+0

將列更新爲自動增加不能修復它不幸的是,我將它設置爲主鍵。 – yoprogrammer

+0

實際的異常在途中丟失。我想你必須解決這個問題,所以你可能會做一個修復並部署它。爲什麼不先從刪除try/catch塊開始,因爲沒用?然後你會看到實際的錯誤。它可能是NULL約束,違反唯一約束等 –

回答

0

實際的例外是什麼?由於您正在使用try catch並拋出自己的InvalidOperationException,因此您看不到實際的一個。 由於對象的當前狀態,操作無效 - 只是InvalidOperationException的一般錯誤消息。

+0

不幸的是,我的環境設置的方式我無法調試服務器端,並看到實際拋出的異常。這是一個網絡表格,我只是查看瀏覽器內的頁面。因此,這個問題很難調試,而且很糟糕! :( – yoprogrammer

+0

如果我註釋掉我的異常,我按預期重定向到我的下一頁 – yoprogrammer

+0

我試過運行原始SQL查詢也無濟於事 – yoprogrammer

0

謝謝大家的幫助。我們解決了這個問題,在ssdl文件中,實體集不存在以將數據庫列映射到實體。