我在MySQL中有数据库,使用常见的mysql实体框架最终会出错,因此我切换到pomelo.entityframeworkcore.mysql。
在我的MySQL Db中,我没有几个存储过程。但我不了解如何与之沟通。通常的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服务器版本以使用正确的语法 第1行的'GetDocumentByName'nameAZ'附近
答案 0 :(得分:0)
您需要从内存中将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();