2017-02-02 2 views
3

У меня есть простая консоль C#, которая использует ORM Dapper, чтобы позвонить в локальную базу данных MySql, чтобы выполнить хранимую процедуру с именем users.UserCreate.Dapper или MySql не обнаруживают хранимые процедуры, содержащие полную остановку "."

Однако при выполнении запроса я получаю исключение, говоря

процедура или функция «UserCreate» не может быть найден в базе данных «пользователи»

Но 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"
  • Использование "UserCreate"

Есть идеи?

+0

'con.ExecuteAsync (\' users.UserCreate \ '...'? – stuartd

+0

Я думаю, что экранирование имени процедуры сделает трюк. Попробуйте написать '' 'users.UserCreate'''' 'будет указывать строку является единственным идентификатором. –

+0

Я просто получаю ошибку «неожиданного персонажа» в визуальной студии, если я просто завершу имя в 'users.UserCreate' с помощью' 'идентификаторов. Также попробовал« user.UserCreate »с ними, заключенными в кавычки (избавился от ошибки VS), а также @ "user.UserCreate' и @" users.UserCreate ". Все еще нет радости – Dezzamondo

ответ

1

Ну, получается, что преобразование с использованием SQL в MySQL было полным кривых обучения с точки зрения возможностей MySQL (в). Чтобы обойти соглашения об именах схемы с использованием полных остановок/периодов («.»), Я вместо этого заменил его знаком подчеркивания.

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

+0

Схемы не обозначают условные обозначения. Схема не является частью имени хранимой процедуры, это местоположение хранимой процедуры, точно так же, как имена серверов и баз данных –

Смежные вопросы