【发布时间】:2018-11-27 13:53:12
【问题描述】:
我只需要使用存储过程来完成我的任务。
在我的应用程序中,我有名为“Document”和“DocumentInfo”的模型,它们指的是 mysql 表。例如,我有最简单的存储过程来按文件名获取 documentInfos 列表:
SQL:
CREATE PROCEDURE `GetDocumentByName` (DocName varchar(255))
BEGIN
Select * from GetAllDocuments where DocumentName like DocName;
END$$
C#:
public List<DocumentsInfo> GetDocumentByName(string Filename)
{
return db.DocumentsInfo.FromSql("CALL GetDocumentByName({0})", Filename).ToList();
}
如您所见,我使用 db - 这是 dbContext。 DocumentsInfo 这是我的模型,我返回了 DocumentsInfo 对象的列表。但是如果我不需要返回整个对象,而只返回一列呢?
现在我需要做同样的事情,但使用“文档”,但这次我只需要获取一个字段 - DocumentBody,即 BLOB
SQL:
CREATE PROCEDURE `GetDocumentBodyById` (DocumentBodyID INT(11))
BEGIN
Select DocumentBody from Document where idDocumentBody = DocumentBodyID;
END$$
C#:
var test = db.FromSql("CALL GetDocumentBodyById({0})", DocumentID).FirstOrDefault();
给我一个错误:
“DBContext”不包含“FromSql”的定义,也没有 可访问的扩展方法“FromSql”接受第一个参数 可以找到类型“DBContext”(您是否缺少 using 指令或 程序集参考?)
也尝试使用此选项:
var test = db.Database.SqlQuery<object>("CALL GetDocumentBodyById({0})", DocumentID).FirstOrDefault();
但收到新错误:
“DatabaseFacade”不包含“SqlQuery”的定义,并且没有 可访问的扩展方法“SqlQuery”
如何调用只返回一个值而不是整个模型对象的存储过程? .net core 可以吗?
【问题讨论】:
标签: c# asp.net-core