我有一个系统,客户想要重新修改当前模型,以便每次用户进行更改时,管理员必须在将更改写入数据库之前接受更改。
我想通过覆盖SaveChanges并在ObjectStateManager中获取每个对象并将其预期的sql代码添加到一个limbo表来快速修复此问题,该表将保持已保存的sql查询,直到管理员接受它为止(然后跑吧)。
我知道你可以在数据库查询中使用ToTraceString(),但是你能以某种方式在从ObjectStateManager中获取的对象上拉出预期的sql查询吗?
想到这样的事情:
var modified = DB.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified);
foreach (var mod in modified)
{
//Insert the query to the limbo table
tblPendingChanges change = new tblPendingChanges();
//Code omitted
change.sql = mod.Query;
//Code omitted
DB.tblPendingChanges.AddObject(change);
mod.Delete();
}
DB.SaveChanges();
答案 0 :(得分:0)
你的解决方案很糟糕。如果您要求必须批准每个更改,则会导致批准工作流,您可以将更改保存到某个临时存储,并在批准后将其移动到主表。它实际上没有在SQL级别上完成。如果您需要在SQL级别上工作的东西,请不要使用像Entity框架这样的高级工具,因为它们实际上并不是为了支持它而设计的。例如,EF不会为您提供为数据修改生成的SQL命令。
答案 1 :(得分:0)