Как программно опубликовать функцию SQL CLR во время семени Entity Framework DbContext?

У меня есть проект SQL Server в моем решении (VS 2012/.Net 4.5). Единственная причина этого проекта в том, что мне нужно было создать функцию CLR, которую я мог бы вызывать из некоторых моих хранимых процедур. Это прекрасно работает, и жизнь прекрасна. Однако мне нужно вручную опубликовать проект SQL, чтобы получить эту функцию в моей базе данных.

Есть ли способ, в идеале, пока я заполняю базу данных (которая является базой данных Entity Framework 5.0 Code-First), выполнить какую-то команду выполнения или опубликовать мою функцию CLR Программно strong> Значит, у меня нет этого дополнительного ручного шага?

ТИА


person Grandizer    schedule 16.10.2013    source источник


Ответы (2)


Да, вам просто нужно передать правильный SQL. Вот фрагмент моего сценария SQL, который добавляет поддержку регулярных выражений в качестве хранимой процедуры, вы можете изменить это в соответствии с вашими потребностями.

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 и перейдите к Programability->Assemblies, щелкните правой кнопкой мыши свою сборку, перейдите к Script Assembly as->Create To->New Query Editor Window и используйте ее в качестве источника.

person Scott Chamberlain    schedule 16.10.2013
comment
Удивительно быстрый ответ, спасибо. С небольшой работой я получил его там, и он работает как чемпион. - person Grandizer; 16.10.2013

Сборки можно создавать, удалять и изменять с помощью T-SQL:

CREATE ASSEMBLY
ALTER ASSEMBLY
DROP ASSEMBLY

person pescolino    schedule 16.10.2013