2013-07-20

LINQ to Entities 更新實體時發生錯誤


在透過Entity Framework想要「新增」Entity進DB的時候,發生了以下的例外狀況:


使用者程式碼未處理 System.Data.UpdateException
  HResult=-2146233087
  Message=更新實體時發生錯誤。詳細資訊請參閱內部例外狀況。
  Source=System.Data.Entity
  StackTrace:
       於 System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
 (略..........)
  InnerException: System.Data.EntityCommandCompilationException
       HResult=-2146232005
       Message=準備此命令定義時發生錯誤。請參閱內部例外狀況以取得詳細資訊。
       Source=System.Data.Entity
       StackTrace:
            於 System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
 (略..........)
       InnerException: System.InvalidOperationException
            HResult=-2146233079
            Message=由於該物件目前的狀態,導致作業無效。
            Source=Oracle.DataAccess
            StackTrace:
                 於 Oracle.DataAccess.Client.SqlGen.DmlSqlGenerator.ExpressionTranslator.Visit(DbScanExpression expression)
 (略..........)
                 於 System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)

查了快一個小時,被「該物件目前的狀態」誤導偵錯方向,一直看不出自己的LINQ語法或物件有什麼奇怪的地方,最後去查了DB才發現是資料表被異動過,Primary Key未設定導致新增失敗,將 Primary Key 設上去之後,就不再發生此問題了。

沒有留言:

張貼留言

引用 Topshelf 無法進行偵錯的經驗

Topshelf  是一個可以簡化撰寫 Windows Service 的套件,引用之後,我們只要當作撰寫一般 Console 的應用程式就可以。 只是近來撰寫上遇到無法進行Debug的狀況,在Visual Studio一進行偵錯可以看到Console 程式被執行,並顯示...