【问题标题】:How To Programmatically Publish A SQL CLR Function During An Entity Framework DbContext Seed?如何在实体框架 DbContext 种子期间以编程方式发布 SQL CLR 函数?
【发布时间】:2013-10-24 21:19:23
【问题描述】:

我的解决方案中有一个 SQL Server 项目(VS 2012/.Net 4.5)。该项目的唯一原因是我需要创建一个 CLR 函数,我可以从我的一些存储过程中调用它。它工作得很好,生活也很棒。但是,我必须手动发布 SQL 项目才能将该函数放入我的数据库中。

有没有一种方法,理想情况下在我为数据库(实体框架 5.0 Code-First 数据库)播种时执行某种执行命令或发布我的 CLR 函数 以编程方式所以我没有这个额外的手动步骤?

TIA

【问题讨论】:

    标签: entity-framework visual-studio-2012 sqlclr


    【解决方案1】:

    是的,您只需要传递正确的 SQL。这是我添加Regex support as a stored procedure的SQL脚本的sn-p,您可以根据需要进行修改。

    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[RegexMatch]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
        DROP FUNCTION [dbo].[RegexMatch]
    GO
    IF  EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'Msdn.SqlRegex')
        DROP ASSEMBLY [Msdn.SqlRegex]
    GO
    --------------------------------
    --Create the clr program to do the regex
    --------------------------------
    CREATE ASSEMBLY [Msdn.SqlRegex]
    AUTHORIZATION [dbo]
    FROM 0x4D5A90000300000004000000F(SNIP)
    WITH PERMISSION_SET = SAFE
    
    GO
    
    ALTER ASSEMBLY [Msdn.SqlRegex]
    ADD FILE FROM 0xEFBBBF7573696E672053797374656D(SNIP)
    AS N'Properties\AssemblyInfo.cs'
    
    GO
    
    ALTER ASSEMBLY [Msdn.SqlRegex]
    ADD FILE FROM 0x7573696E672053797374(SNIP)
    AS N'RegexMatch.cs'
    GO
    
    CREATE FUNCTION [dbo].[RegexMatch](@input [nvarchar](max), @pattern [nvarchar](4000))
    RETURNS [bit] WITH EXECUTE AS CALLER
    AS 
    EXTERNAL NAME [Msdn.SqlRegex].[UserDefinedFunctions].[RegexMatch]
    GO
    

    要获得三字节数组,只需手动添加一次程序集,然后进入 Sql Server Management Studio 并转到 Programability->Assemblies 右键单击​​您的程序集并转到 Script Assembly as->Create To->New Query Editor Window 并将其用作您的源。

    【讨论】:

    • 很棒的快速响应,谢谢。通过一些工作,我把它弄到了那里,它像冠军一样运行。
    【解决方案2】:

    可以使用 T-SQL 创建、删除和更改程序集:

    CREATE ASSEMBLY
    ALTER ASSEMBLY
    DROP ASSEMBLY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      相关资源
      最近更新 更多