Вызовите хранимую процедуру, используя pomelo.entityframeworkcore.mysql в ядре .net - PullRequest
0 голосов
/ 18 октября 2018

У меня есть БД в MySQL, в которой используется общая структура сущностей mysql, в результате чего возникают ошибки, поэтому я перешел на pomelo.entityframeworkcore.mysql.

В моей базе данных MySQL есть несколько хранимых процедур.Но я не берусь за общение с ним.Обычные запросы mysql отлично работают и работают так:

public void ONELINE_SQL_TEST()
{
    var db = new DBContext();
    var test = db.DocumentsInfo.FromSql("SELECT * FROM `DocumentsInfo` LIMIT 0, 2").ToList();         
}

DocumentsInfo - это мой класс Model / одна из моих таблиц mysql.

Но я не могу вызвать свои хранимые процедуры, продолжаюполучение ошибок:

USE `testProj`$$
CREATE PROCEDURE `GetDocumentsByName` (DocName varchar(255))
BEGIN
Select * from AllDocuments where DocumentName like DocName;
END$$

DELIMITER ;

и код, который я пробовал:

var docs1 = db.DocumentsInfo.FromSql("GetDocumentByName @DocName = {0}", Filename).ToList(); //not working
var docs2 = db.DocumentsInfo.FromSql("GetDocumentByName @p0", Filename).ToList(); //not working

ошибка:

В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с GetDocumentByName nameAZ в строке 1 * enter image description here

1 Ответ

0 голосов
/ 19 октября 2018

Вам нужно поместить CALL до того, как ваша sql хранимая процедура из памяти:)

т.е.

var docs1 = db.DocumentsInfo.FromSql("CALL GetDocumentByName @p0",    Filename).ToList();

Последнее, что я прочитал: EF Core не поддерживает именованные параметры для хранимых процедур, поэтому@ p0 Итак, если у вас было более 1 параметра, и, скажем, один из них был путем, вы бы сделали следующее:

var docs1 = db.DocumentsInfo.FromSql("CALL GetDocumentByName @p0, @p1",    parameters: new[] { Path, Filename }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...