c# - Dapper 或 MySql 找不到包含句号的存储过程 "."

标签 c# mysql stored-procedures dapper

我有一个简单的 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/

相关文章:

c# - 创建 UIButton 时不显示标题文本

c# - 对 nhibernate n+1 警报消息感到困惑

MySQL:从多个表中检索数据

mysql - 关于规划大型数据库的任何提示

asp.net - 过程或函数指定的参数过多

c# - XML反序列化泛型方法

c# - 将列表从 IronPython 传递到 C#

mysql - 如何识别缺少索引的慢速查询?

mysql - MYSQL中Write Case语句并在when子句中调用过程

stored-procedures - feathersjs sequelize 通过钩子(Hook)调用存储过程无法解决