读取实体意图sql查询

本文关键字:查询 sql 意图 实体 读取 | 更新日期: 2023-09-27 18:14:35

我有一个系统,其中客户希望重做当前模型,以便每次用户进行更改时,管理员必须在将更改写入数据库之前接受更改。

我正在考虑通过覆盖SaveChanges并在ObjectStateManager中获取每个对象并将其预期的sql代码添加到limbo表中来做一个快速修复,该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();

读取实体意图sql查询

你的解决方案糟透了。如果您的需求是每个更改都必须经过批准,那么它将导致审批工作流,您将更改保存到一些临时存储中,并在批准后将其移动到主表中。这实际上不是在SQL级别上完成的。如果你需要在SQL级别上工作的东西,不要使用像实体框架这样的高级工具,因为它们并不是为支持这个而设计的。例如,EF将不提供为数据修改生成的SQL命令。

我通过使用在这里找到的实体包装器解决了这个问题

这允许我在发送到服务器之前读取每个sql语句。重定向。

我必须编辑包装器,以允许将参数正确插入到语句中,以便sql语句可以运行。