我正在尝试使用 Entity Framework 迁移在我的 mySQL 数据库中创建一个函数。当我直接在 MySQL Workbench 中运行它时,SQL 运行良好,但在 EF 迁移中运行时失败。
如何使用 EF 迁移创建函数?
Sql(@"
DROP function IF EXISTS `f_JumperName`;
DELIMITER $$
CREATE FUNCTION `f_JumperName`
(
JumperID int
)
RETURNS varchar(500)
BEGIN
DECLARE result VARCHAR(500);
SELECT j.LastName + ', ' + j.FirstName
INTO result
FROM Jumper j
WHERE j.JumperID = JumperID;
RETURN x;
END$$
DELIMITER ;
");
错误消息:您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 'DELIMITER $$ 附近使用的正确语法
创建函数 f_JumperName
(...
最佳答案
看来问题是由DELIMITER
句引起的。
要解决这个问题,您可以将 SQL 分成句子,这样您就不需要重新定义 ;
分隔符。您会得到两个单独的句子,一个用于drop
,另一个用于create function
:
public override void Up()
{
Sql(@"DROP function IF EXISTS `f_JumperName`;");
Sql(@"CREATE FUNCTION `f_JumperName`
(
JumperID int
)
RETURNS varchar(500)
BEGIN
DECLARE result VARCHAR(500);
SELECT j.LastName + ', ' + j.FirstName
INTO result
FROM Jumper j
WHERE j.JumperID = JumperID;
RETURN x;
END;");
}
然后在第二句末尾将之前的 $$
字符替换为 ;
。
这并没有解决真正的问题,即无法正确设置定界符,但它确实有效。我找到了一些关于通过 MySQL 连接器提供的 MySqlScript.Delimiter
属性真正更改分隔符的页面,但我不知道在迁移文件,因为您必须以某种方式访问与数据库的真实连接。我不太确定它可以在这里使用。
关于mysql - Entity Framework mysql - 创建函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333258/