从DbEntityEntry对象获取DbSet <TEntity>

时间:2019-07-23 11:58:27

标签: c# entity-framework

我想将每个Event保存在一个表中。 要使用这些数据,我需要在我的Event表中保存ID和Entity(表名)。 从EntityFrameWork ChangeTracker中,我可以像这样获取所有更改的数据:

 LogEvents(dbContext.ChangeTracker.Entries().Where(x => x.State != EntityState.Unchanged).ToList());

我的LogEvents方法收到每个“已更改”的值,在此方法中,当我想获取“添加的”实体的ID时出现问题:该ID尚未保存在数据库中。 为了避免这种情况,我想从max Id + 1中扣除ID。 但是,当我需要让TEntity对其进行请求时,我很难受。 我想这样做:

public static void LogEvents(List<DbEntityEntry> entries)
{
    using (var db = new SOAPContext())
    {
        foreach (var eve in entries)
        {
            int? Id_Entite = null;
            if (eve.State == EntityState.Deleted)
                Id_Entite = eve.CurrentValues.GetValue<int>("Id");
            else if (eve.State == EntityState.Added)
            {
                // When a Entity is added, I want to deduct the next ID based on the last max record
                //eve.Entity // Need it to return a TEntity
                Id_Entite = db.Set<eve.Entity>().Max(r => r.Id).ID + 1;
            }
            else
                Id_Entite = eve.OriginalValues.GetValue<int>("Id");
            // Log event write in a Evenement table every changes
            LogEvent(eve, Id_Entite, db);
        }
        db.SaveChanges();
    }
}

我该怎么做,也许有一种更简单的方法来做我想做的事。

0 个答案:

没有答案