SQL Server + CLR + EF 4 + CF:是否可以通过代码启用CLR并部署CLR箱?

时间:2012-02-21 17:43:48

标签: sql-server entity-framework deployment ef-code-first clr

我正在使用SQL Server 2012 RC0 + EF 4 + MVC 4.我的数据库的90%是使用EF的Code First功能。

我将使用一些CLR函数用于正则表达式,如here和其他文章所述。

正如我所说的,我正在使用EF Code First,所以我利用这个功能,在首次使用时创建db并执行一些额外的SQL命令来制作索引,约束,SQL计算字段和SQL函数。

这是我第一次使用种子功能的一个例子:

public class mydbInitializer : DropCreateDatabaseIfModelChanges<TManagerContext>
   {
    protected override void Seed(mydbContext context)
    {
        try
        {
            context.Database.ExecuteSqlCommand("CREATE NONCLUSTERED INDEX IX_index1 ON table1 (field1)");
            context.Database.ExecuteSqlCommand("CREATE NONCLUSTERED INDEX IX_index2 ON table1 (field2)");
            ...

//在这里,我将把一些代码放在SQL Server上启用CLR并将我的CLR功能部署到其中....

我会将我的应用程序部署到不同的服务器,所以我想知道是否可以在首次使用应用程序时启用CLR并部署CLR功能?出于安全原因,我会去使用不涉及创建的版本替换bin或删除db。

你认为这是一种错误的做法吗?我是否需要使用SQL Management Studio?或者,您可以创建批处理以便于集成CLR及其容器吗?

非常感谢你的帮助,抱歉我的英语不好。 最诚挚的问候

1 个答案:

答案 0 :(得分:3)

是的,有可能。启用S​​QLCLR可以通过运行sp_configure

来完成
exec sp_configure 'clr_enabled', 1;
reconfigure;

直接从代码使用CREATE ASSEMBLY <name> FROM @bits;将程序集加载到数据库中,就像@bits在程序集DLL流中传递一样。您可以将SQLCLR程序集作为资源或依赖项添加到应用程序,它们都允许您检索到程序集DLL的流并将其作为@bits的SqlBytes参数传递。