在sql server SQLCLR中同步对静态变量的访问

Ach*_*him 4 c# sql-server synchronization sqlclr

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

lock(someGuard)
{
    // ... access static configuration
}
Run Code Online (Sandbox Code Playgroud)

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

Rem*_*anu 7

实际上有一个没有文档的hack:用CompilerGenerated属性装饰类.与任何未记录的变通方法一样,里程可能会随着将来的版本而变化.

你应该不需要这个,如果静态是只读的那么你可以只读它并且程序集将部署好,在SAFE程序集中接受只读静态.并且真正只读,锁定防护也是不必要的.

如果您无法将其标记为只读并取消锁定,则意味着不是只读而且您将处于移动的沙地区域.您可以阻止SQL工作程序并具有不可预测的结果(因此符合UNSAFE要求).该编译器生成的伎俩真的应该有一个使用很多照顾,酮基,如果你完全理解的含义.您需要的事实lock是一个强有力的指标,您的代码实际上是不安全的SQL和静态.