oracle11g - 如何从 Entity Framework 设置 dbms_session.set_identifier

标签 oracle11g entity

我正在尝试在由 Oracle 数据库支持的 Web 应用程序中实现审计跟踪,当用户通过 TOAD 等 SQL 客户端更改数据或当我手动使用 Oracle 时,我们确实有审计跟踪触发器可以完美地工作.DataAccess.Client 通过

        // rest omitted for brevity // 

        var command = new OracleCommand();
        command.Connection = conn;


        var useridsql = new StringBuilder();

        useridsql.AppendLine("BEGIN");
        useridsql.AppendLine("dbms_session.set_identifier('username');");
        useridsql.AppendLine("END;");



        command.CommandText = useridsql.ToString();

        command.ExecuteNonQuery(); 
     // Rest of the insert / update / delete code // 

当我尝试通过重写 DbContext 类中的 SaveChanges() 来执行相同操作时,不起作用。

我假设实体使用的管理连接方式与上述 ADO.NET 示例不同,因此更新发生的原因是在错误的数据库 session 上,因此 dbms_session 对触发器不可见。

我确实尝试关闭连接池,但这也没有多大帮助。

我已经尝试了我所知道的所有可能的情况,但没有成功。

这里有人有想法并且可以将我推向正确的方向吗?

提前致谢,非常感谢您的帮助。

谨致问候,

最大。

最佳答案

我也尝试了你所做的,但在跟踪中我可以看到 clientid 被重置为空字符串。这对我有用。

我的DbContext

private SiSiEntities db = new SiSiEntities();

我认为执行以下操作将是一个不同的 session ,但它有效。

OracleConnection conn = db.Database.Connection as Oracle.DataAccess.Client.OracleConnection;
conn.Open();
conn.ClientId = User.Identity.Name.ToString().ToLower(); 
db.SaveChanges();

关于oracle11g - 如何从 Entity Framework 设置 dbms_session.set_identifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17971662/

相关文章:

sql - PLS-00428:此SELECT语句中应有一个INTO子句

java - Oracle JVM 运行时错误 : Provider com. sun.xml.stream.ZephyrParserFactory 未找到

java - JRebel 远程服务器即服务

sql - 连接 3 个表,只使用 2 个的数据?

持久性无知和 DDD 现实

linq - 在 LINQ to Entities 中实例化上下文

java - JPA注释和SQL表

java - 删除与另一个对象有manyTomany关系的对象

oracle11g - Oracle 11g语句创建新用户并授予特权?

JPA 错误 : The entity has no primary key attribute defined