我在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“附近
最佳答案
您需要在内存中的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/