我想将每个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();
}
}
我该怎么做,也许有一种更简单的方法来做我想做的事。