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