在使用實體框架更新具有 複合主鍵的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");
}
}
}
你必須表現你對這個代碼。更可能的是,您正在使用一個被修改的對象,並且在向前移動之前必須在某個特定狀態下創建一個對象的副本(所以在您處理該對象時不能修改其他線程) - 或鎖定它。如果不知道自己想要做什麼以及如何做,就說不清楚。 –
很抱歉更新了我們正在嘗試的代碼的問題。只有一個線程正在運行,我們沒有任何線索正在更新黑白加載和更新。 –
您確定要檢索記錄而不是空的ReportContractHistoryDatas嗎?首先,我會做一個空檢查,因爲你正在使用FirstOrDefault。或者,您可以使用First(),如果數據庫中沒有完全匹配,則會引發異常。你有一個ReportContractHistoryDatas的實體定義嗎?你可以發佈,如果你這樣做? – JSF