gpt4 book ai didi

c# - 同步访问sql server SQLCLR中的静态变量

转载 作者:太空狗 更新时间:2023-10-30 00:29:04 25 4
gpt4 key购买 nike

我写了一个集成在sql server中的程序集,提供了一些用C#写的存储过程。该程序集有一个只读静态变量,其中包含一些配置数据。该数据通过存储过程进行操作,存储过程也由程序集提供。显然我必须同步访问这个静态变量。我试着用

lock(someGuard)
{
// ... access static configuration
}

在我的配置类中。但是后来我得到一个 HostProtectionException,告诉我程序集必须以完全信任的方式运行才能做到这一点。有更好的方法吗?

最佳答案

实际上有一个未记录的 hack:用 CompilerGenerated 装饰类属性。与任何未记录的解决方法一样, future 的版本可能会有所不同。

虽然你不应该需要这个,如果静态是只读的,那么你可以声明它是只读的,程序集将部署得很好,只读静态在 SAFE 程序集中被接受。并且是真正只读的,也不需要锁守卫。

如果您不能将其标记为只读并解除锁定,则意味着它不是只读的,您将进入流沙地带。您可以阻止 SQL worker 并产生不可预知的结果(因此需要 UNSAFE)。 CompilerGenerated 技巧确实应该很多 小心使用,仅当您完全理解其中的含义时。您需要 lock 的事实是您的代码实际上对 SQL 和静态不安全的有力指示。

关于c# - 同步访问sql server SQLCLR中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1284628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com