我在MySQL中有DB,使用普通的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是我的模型类/我的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服务器版本,以便使用正确的语法
在第1行的“GetDocumentByName”nameAZ“附近
mysql - NET Core中使用pomelo.entityframeworkcore.mysql调用存储过程-LMLPHP

最佳答案

您需要在内存中的sql存储过程之前调用:)

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

上一次我读到EF Core不支持存储过程的命名参数,因此@p0是这样的,如果您有多个参数,并且说其中一个参数是您将执行以下操作的路径:
var docs1 = db.DocumentsInfo.FromSql("CALL GetDocumentByName @p0, @p1",    parameters: new[] { Path, Filename }).ToList();

关于mysql - NET Core中使用pomelo.entityframeworkcore.mysql调用存储过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52879643/

10-12 00:48
查看更多