2016-09-14 38 views
0

在使用實體框架更新具有 複合主鍵的Oracle表的日期字段時,獲取以下錯誤。我們檢查了其他線程(Entity Framework: "Store update, insert, or delete statement affected an unexpected number of rows (0).")中列出的所有答案,如實體狀態,缺少ID字段等,但沒有一個幫助。因此,創建新的問題,以獲得新問題的答案。請注意,我們正在使用DevArt連接到Oracle數據庫。存儲更新,插入或刪除語句影響了意外數量的行(0)。實體可能已被修改

「商店更新,插入或刪除語句影響的行(0)。實體可能已被修改或刪除,因爲實體加載的一個意想不到的數量。刷新ObjectStateManager項」

這是我們正在努力的代碼:

using (var context = new OracleContext(_connString)) 
{ 
    var dbObjT = context.ReportHistoryDatas.FirstOrDefault(x => x.key1.Trim() == "300041" && x.key2== 1); 
    if(dbObjT != null) 
    { 
     dbObjT.DateUpdated = someDate; 
     context.SaveChanges(); 
    } 
} 

報告歷史數據實體:

public class ReportHistoryData 
{ 
    //PK ID 
    public int key1 { get; set; } 

    public string key2{ get; set; } 

    public DateTime? DateAdded { get; set; } 

    public DateTime? DateUpdated { get; set; } 

    public class ReportHistoryDataConfiguration : EntityTypeConfiguration<ReportHistoryData> 
    { 
     public ReportHistoryDataConfiguration() 
     { 
      ToTable("REPORTHISTORY"); 
      HasKey(k => new {k.key1, k.key2}); 
      Property(p => p.key1).HasColumnName("key1").IsRequired(); 
      Property(p => p.key2).HasColumnName("key2").IsRequired(); 
      Property(p => p.DateAdded).HasColumnName("Date_Added"); 
      Property(p => p.DateUpdated).HasColumnName("Date_Updated"); 
     } 
    } 
} 
+0

你必須表現你對這個代碼。更可能的是,您正在使用一個被修改的對象,並且在向前移動之前必須在某個特定狀態下創建一個對象的副本(所以在您處理該對象時不能修改其他線程) - 或鎖定它。如果不知道自己想要做什麼以及如何做,就說不清楚。 –

+0

很抱歉更新了我們正在嘗試的代碼的問題。只有一個線程正在運行,我們沒有任何線索正在更新黑白加載和更新。 –

+0

您確定要檢索記錄而不是空的ReportContractHistoryDatas嗎?首先,我會做一個空檢查,因爲你正在使用FirstOrDefault。或者,您可以使用First(),如果數據庫中沒有完全匹配,則會引發異常。你有一個ReportContractHistoryDatas的實體定義嗎?你可以發佈,如果你這樣做? – JSF

回答

0

我認爲你缺少標記的實體修改:

試試這個:

using (var context = new OracleContext(_connString)) 
{ 
    var dbObjT = context.ReportHistoryDatas.FirstOrDefault(x => x.key1.Trim() == "300041" && x.key2== 1); 
    if(dbObjT != null) 
    { 
     dbObjT.DateUpdated = someDate; 

     //Mark the entity as modified before saving changes. 
     context.Entry(dbObjT).State = System.Data.Entity.EntityState.Modified; 

     context.SaveChanges(); 
    } 
} 
+0

沒有我們在調試時檢查了實體狀態,並且它處於修改狀態。 –

相關問題