2016-06-13 85 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文件中,实体集不存在以将数据库列映射到实体。