更新我们的Oracle表的日期字段时出现以下错误 使用实体框架的复合主键。我们检查了其他线程(Entity Framework: "Store update, insert, or delete statement affected an unexpected number of rows (0).")中列出的所有答案,例如实体状态,缺少的id字段等,但这些都没有帮助。因此,创建新问题以获得此问题的新答案。请注意,我们正在使用DevArt连接到Oracle数据库。
“存储更新,插入或删除语句影响了意外的行数(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)
我认为您缺少将实体标记为已修改:
试试这个:
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();
}
}