'CREATE FUNCTION'必须是查询批处理中的第一个语句.实体框架代码优先

cod*_*sed 6 .net entity-framework sql-server-2008 ef-code-first ef-migrations

我有一些使用Entity框架生成的内联SQL脚本(函数和存储过程),Code第一种方法.

Update-Database -Script -SourceMigration:0

使用上面的命令,我得到了我在测试或生产时执行的SQL Script文件.

但是,由于以下错误,我无法运行生成的脚本:

'CREATE FUNCTION' must be the first statement in a  query batch. 
Run Code Online (Sandbox Code Playgroud)

该脚本生成为:

IF @CurrentMigration <'201410150019333_CreatefnGenerateRequestCode'BEGIN CREATE FUNCTION [dbo].[fnGenerateRequestCode](@ userID varchar(max))
RETURNS varchar(14)
as

我怎样才能解决这个问题?

Sub*_*nch 2

您必须生成代码并将其作为动态 sql 执行。

DECLARE @Sql NVARCHAR(MAX)
SET @Sql = 
'
IF OBJECT_ID(''fn_Test'') IS NOT NULL DROP FUNCTION fn_Test
GO

CREATE FUNCTION fn_Test(@a INT)
RETURNS INT
BEGIN
    RETURN @a
END
'
IF 1 = 1
BEGIN
    EXEC(@Sql)
END
Run Code Online (Sandbox Code Playgroud)