【问题标题】:Pass parameters via EF to be available in SQL Server triggers (and connection pooling?)通过 EF 传递参数以在 SQL Server 触发器(和连接池?)中可用
【发布时间】:2015-10-01 08:44:16
【问题描述】:

我在谷歌上搜索了一段时间,但不幸的是没有找到明确的解决方案。这个问题可以分为 EF 特定部分,而不是我知道的 EF 特定部分。

我有一个通过 EF 6 使用 SQL Server 的 Web 应用程序 (ASP.NET MVC)。我想实现审计触发器,所以我想为触发器提供一些审计信息,例如当前用户登录的网络.我认为 SQL Server 中应该有一些连接级别参数化工具来初始化自定义 SET 变量,这些变量可以在该连接期间通过 SQL 访问(在触发器中。我发现的唯一一件事是受限的方式 CONTEXT_INFO() 这是二进制的。

我也知道临时表什么是本地连接,但是启动所有连接以创建临时表并插入一行似乎有点过头了。

但我最担心的是连接池。在我看来,建议的解决方案要么由于连接池(临时表)而无法正常工作,要么它有效地杀死了连接池。 (连接字符串操作技术)

我仍然认为这个必须知道网络用户名的审计触发器是如此常见和基本,所以我希望有人想出正确的解决方案并且它是可用的,我只是找不到它。

【问题讨论】:

    标签: c# asp.net sql-server entity-framework


    【解决方案1】:

    如果您使用的是 EF,为什么还要使用触发器?您可以覆盖 DbContext.SaveChanges() 并在 C# 中实现您的审计逻辑,并提供所有必需的信息。请参阅this answer 以了解基本审计的示例。或here 进行更全面的审核。

    【讨论】:

    • 因为我手头有很多 SQL 触发器(或更多:触发器生成器 T4 模板)。还有许多开箱即用的基于触发器的审计解决方案是稳定的。我不想重新发明轮子,并在 C# 中重新实现所有这些。我只想记录我的 ASP.NET 用户,而不是 SQL Server 登录用户。
    • 做了一些研究,我相信了。谢谢。
    • 好声音。有什么特别的论点帮助你下定决心吗?
    • 是的,我发现了一些带有单元测试的非常好的代码/nuget 包,然后我可以以相对较低的成本实现和测试我自己的版本。与真正的触发器版本相比,性能当然会因为额外的往返而下降,并且某些功能受到限制,例如我无法记录事务 id,关联审计记录是原子的,但似乎仍然是一个不错的交易通过消除 TSQL(我的意思是不需要多个平台来维护和部署)
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多