2013-10-16 22 views
0

我的解決方案中有一個SQL Server項目(VS 2012/.Net 4.5)。該項目的唯一原因是我需要創建一個CLR函數,我可以從我的一些存儲過程調用。它工作得很好,生活真棒。但是,我必須手動發佈SQL項目才能將該函數放入我的數據庫中。如何以編程方式在實體框架DbContext種子期間發佈SQL CLR函數?

有沒有一種方法,理想當我播種的數據庫(這是一個實體框架5.0代碼優先數據庫)做某種執行命令或我的CLR函數的發佈編程所以不有這個額外的手動步驟?

TIA

回答

1

是的,你只需要通過正確的SQL。這是我的一個SQL腳本的片段,它增加了Regex support as a stored procedure,你可以根據你的需要修改它。

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並使用它作爲您的源。

+0

真棒快速響應,謝謝。通過一些小小的工作,我在裏面找到了它,並且像冠軍一樣運行。 – Grandizer

相關問題