【问题标题】:Reading single BLOB entry from stored procedure从存储过程中读取单个 BLOB 条目
【发布时间】: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


    【解决方案1】:

    对于FromSql,它与Query一起使用,您可以定义一个新的模型返回结果。

        public class ResultDto
    {
        public string Name { get; set; }
    }
    

    OnModelCreating 中定义Query

            protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
    
            builder.Query<ResultDto>();
        }
    

    用途:

      var result = _context.Query<ResultDto>().FromSql("exec GetDocumentBodyById {0}", 1).ToList();
    

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 2012-06-16
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多