我有一个简单的 C# 控制台,它使用 Dapper ORM 调用本地 MySql 数据库,以执行名为 users.UserCreate
的存储过程。
但是,当运行查询时,我得到一个异常提示
Procedure or function 'UserCreate' cannot be found in database 'users'
但是 users
不是数据库 local_db
是。
这里使用一个例子:
public virtual Task CreateAsync(User user)
{
using (var con = new MySqlConnection(_dbConn))
return con.ExecuteAsync("users.UserCreate", user, commandType: CommandType.StoredProcedure);
}
_dbConn 包含连接字符串,还将数据库名称声明为 local_db
。
这是存储过程的样子:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `users.UserCreate`(IN `@UserId` VARCHAR(128), IN `@UserName` VARCHAR(255), IN `@PasswordHash` LONGTEXT, IN `@SecurityStamp` LONGTEXT)
NO SQL
INSERT INTO Users
(Id, UserName, PasswordHash, SecurityStamp, EmailConfirmed, PhoneNumberConfirmed, TwoFactorEnabled, LockoutEnabled, DateCreated, DateUpdated, IsDeleted)
VALUES
(@UserId, @UserName, @PasswordHash, @SecurityStamp, 0, 0, 0, 0, CURRENT_DATE, CURRENT_DATE, 0)$$
DELIMITER ;
问题与MySql或Dapper有关吗?我在 SQL Server 中对存储过程使用类似的命名约定,也使用 Dapper,之前没有遇到过这个问题。
我试过:
- 使用“local_db.users.UserCreate”
- 使用“local_db.UserCreate”
- 使用“用户创建”
有什么想法吗?
最佳答案
好吧,事实证明,从使用 SQL 到 MySQL 的转换在 MySQL 的(不)能力方面充满了学习曲线。为了使用句点/句点 (".") 绕过架构命名约定,我只是将其替换为下划线。
对于面临同样困境的任何其他人,使用下划线,从长远来看,您将避免数小时的头痛!
关于c# - Dapper 或 MySql 找不到包含句号的存储过程 ".",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42007894/