我的解決方案中有一個SQL Server項目(VS 2012/.Net 4.5)。該項目的唯一原因是我需要創建一個CLR函數,我可以從我的一些存儲過程調用。它工作得很好,生活真棒。但是,我必須手動發佈SQL項目才能將該函數放入我的數據庫中。如何以編程方式在實體框架DbContext種子期間發佈SQL CLR函數?
有沒有一種方法,理想當我播種的數據庫(這是一個實體框架5.0代碼優先數據庫)做某種執行命令或我的CLR函數的發佈編程所以不有這個額外的手動步驟?
TIA
我的解決方案中有一個SQL Server項目(VS 2012/.Net 4.5)。該項目的唯一原因是我需要創建一個CLR函數,我可以從我的一些存儲過程調用。它工作得很好,生活真棒。但是,我必須手動發佈SQL項目才能將該函數放入我的數據庫中。如何以編程方式在實體框架DbContext種子期間發佈SQL CLR函數?
有沒有一種方法,理想當我播種的數據庫(這是一個實體框架5.0代碼優先數據庫)做某種執行命令或我的CLR函數的發佈編程所以不有這個額外的手動步驟?
TIA
是的,你只需要通過正確的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
並使用它作爲您的源。
組件可以創建,刪除,並用T-SQL改變:
真棒快速響應,謝謝。通過一些小小的工作,我在裏面找到了它,並且像冠軍一樣運行。 – Grandizer