存储更新,插入或删除语句会影响意外的行数(0)。实体可能已被修改

时间:2016-09-14 17:20:36

标签: c# oracle entity-framework

更新我们的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");
        }
    }
}

1 个答案:

答案 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();
    }
}