Чтение одной записи BLOB из хранимой процедуры - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно выполнить задачу, используя только хранимые процедуры.

В моем приложении у меня есть Модели с именами «Документ» и «ДокументИнфо», которые ссылаются на таблицы 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?

1 Ответ

0 голосов
/ 28 ноября 2018

Для FromSql, используется с Query, вы можете определить новую модель для возвращаемого результата.

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

Определить Query в OnModelCreating

        protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Query<ResultDto>();
    }

Использование:

  var result = _context.Query<ResultDto>().FromSql("exec GetDocumentBodyById {0}", 1).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...