【问题标题】:SQL Server + CLR + EF 4 + CF: Is it possible to enable CLR and deploy CLR bins all by code?SQL Server + CLR + EF 4 + CF:是否可以全部通过代码启用 CLR 和部署 CLR bin?
【发布时间】:2012-02-21 17:43:48
【问题描述】:

我正在使用 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 功能?出于安全原因,我会去用不涉及创建或删除 db 的版本替换 bin。

您认为这是一种错误的方法吗?我是否需要使用 SQL Management Studio?或者,您可以创建批处理以促进 CLR 及其 bin 的集成?

非常感谢您的帮助,并为我的英语不好感到抱歉。 最好的问候

【问题讨论】:

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


    【解决方案1】:

    是的,这是可能的。可以通过运行sp_configure来启用SQLCLR:

    exec sp_configure 'clr_enabled', 1;
    reconfigure;
    

    要将程序集直接从代码加载到数据库中,请使用CREATE ASSEMBLY &lt;name&gt; FROM @bits;,并作为@bits 传递程序集DLL 流。您可以将 SQLCLR 程序集作为资源或依赖项添加到您的应用程序,两者都允许您将流检索到程序集 DLL 并将其作为@bits 的SqlBytes 参数传递。

    【讨论】:

    • 非常感谢莱姆斯。对不起我的无知,我是初学者。我应该如何通过代码传递exec 命令?你能举一个更详细的例子吗?感谢您的帮助!
    • 此外,如果我将它作为资源传递,那么DLL会被传输到服务器吗? THX
    • THX 莱姆斯。我按照你的建议做了,它有效。此外,我删除了导入的dll以检查它是否在db中导入,它仍然可以工作。感谢您的帮助!
    猜你喜欢
    • 2019-08-19
    • 2014-04-06
    • 1970-01-01
    • 2011-01-08
    • 2011-06-15
    • 2010-09-26
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多