2013-10-17 60 views
4

我寫了一個相當簡單的代碼(基於WCF和Windows窗體的客戶端服務器)。 我試圖更新數據庫,以便我可以測試我的代碼,我遇到了上述異常。 任何想法如何解決它?'System.Data.Entity.Infrastructure.DbUpdateException'發生在EntityFramework.dll中

 // For testing 
     public void updateTable() 
     { 
     using (var db = new overlayDBEntities()) 
     { 
      var overlaydb = new overlayData 
      { 
       DeviceId = "1111", 
       TimestampUTC = new DateTime(1990, 1, 1, 9, 9, 9), 
       OverlayData1 = "Yoash And Maayan" 
      }; 

      db.overlayData.Add(overlaydb); 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      var overlaydb1 = new overlayData 
      { 
       DeviceId = "1111", 
       TimestampUTC = new DateTime(2000, 2, 2, 10, 10, 10), 
       OverlayData1 = "seconed seconed seconed " 
      }; 

      db.overlayData.Add(overlaydb); 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch (Exception ec) 
      { 
       Console.WriteLine(ec.Message); 
      } 
     } 
    } 
+1

使用ex.ToString或調試器來獲取一些有用的信息。 –

+0

您需要某種內部異常來了解您的問題的細節,您報告的異常消息只是告訴我們數據庫無法更新,內部異常可能會有SQL錯誤消息。 –

+0

任何想法我怎麼做? – user2656851

回答

2

如果您需要更新行,如果已經存在數據庫中,請不要使用context.Add();您可以使用如下所示。

var overlaydb1 = new overlayData 
    { 
     DeviceId = "1111", 
     TimestampUTC = new DateTime(2000, 2, 2, 10, 10, 10), 
     OverlayData1 = "seconed seconed seconed " 
    }; 

    try 
    { 
     db.overlayData.Attach(overlaydb1); 
     db.ObjectStateManager.ChangeObjectState(overlaydb1, EntityState.Modified); 
     db.SaveChanges(); 
    } 

    catch (Exception ec) 
    { 
     Console.WriteLine(ec.Message); 
    } 
0

據蘭,

「錯誤消息的所有細節,你需要知道:

附加信息:自數據庫創建的模型支持的‘AppraisalDBContext’已經時過境遷。考慮使用Code First Migrations來更新數據庫(http://go.microsoft.com/fwlink/

這意味着您在AppraisalDBContext中使用的某個類已更改,但數據庫尚未更新,因此現在已過期。 O更新此使用的Code First遷移。」

The Original Post

0

我認爲這個問題是你的日期時間的類型。 sqlsever有多個日期時間。如果你檢查你的內部異常,你可能會看到你想要放入表中的類型以及它實際需要的類型。轉換不能自動完成,你應該改變它在表中或將其轉換爲你的代碼。 它可以是datetime,datetime2(7)等。

-3

下面是解決System.Data.Entity.Infrastructure.DbUpdateException的過程。 請按照說明。

快樂編碼!

https://msdn.microsoft.com/en-us/data/dn579398.aspx

最好的問候, 忒提斯丁吳

+2

嗨,歡迎StackOverflow上。請不要張貼鏈接作爲答案。如果頁面消失,你的答案就毫無用處。利用這些信息來建立你的答案和使用的環節僅供參考。謝謝。 – Cthulhu

1

同樣的錯誤也出現在用戶忘記通過應用特別是表中添加Primery key ..然後添加數據。

-1
using Code first approach . 
How to define primary key in Web API. 

Eg:- Model Class 
    public class Categories 
    { 
     [Key] 
     public int cateId { get; set; } 
     public string cateName { get; set; } 
    } 
Controller Class:- Categories Controller 
public bool AddCate(Categories preg) 
     {    
      db.Categories.Add(preg); 
      db.SaveChanges(); 
      return true; 
     } 
Context Db Class 
    public System.Data.Entity.DbSet<TestingWebApi.Models.Categories> Categories { get; set; } 
Error:-"System.Data.Entity.Infrastructure.DbUpdateException", 
相關問題