Я сейчас работаю над проектом, и для этой части, над которой я работаю, мне необходимо вызвать хранимую процедуру, которая возвращает строку TicketNumber
в формате TodaysDate.Number
(например, 11032019.0001
).
Вот в чем проблема.Процедура работает, и я могу вызвать это, запустив оператор SQL в базе данных, однако, похоже, ничего не работает при попытке запустить это с C # в контроллере.
В настоящее время у меня есть это:
var NewOrderIdOut = new SqlParameter("@NewOrderIdOut", "");
var result = await db.Tickets.SqlQuery("[dbo].[usp_NewOrderId] @NewOrderIdOut", NewOrderIdOut).SingleAsync();
Хранимая процедура выглядит следующим образом:
CREATE PROCEDURE usp_NewOrderId
(@NewOrderIdOut CHAR(13) OUTPUT )
AS
BEGIN
IF EXISTS (SELECT 1 FROM OrderNumberGenerator
WHERE CreatedDate <> CAST(GETDATE() AS DATE))
TRUNCATE TABLE OrderNumberGenerator -- restart the counter everyday :)
INSERT INTO OrderNumberGenerator
DEFAULT VALUES
SELECT @NewOrderIdOut =
CONVERT(CHAR(8), GETDATE(), 112) +
RIGHT( '.000' + CAST(SCOPE_IDENTITY() AS VARCHAR(4)), 4)
END
Я получаю эту ошибку:
Устройство чтения данных несовместимо с указанным PSARMM.Models.Ticket.Элемент типа TicketId не имеет соответствующего столбца в считывателе данных с тем же именем.
Единственная проблема заключается в том, что процедура не возвращает все параметры, которые находятся всмоделируйте только одну строку ticketNumber, чтобы была выдана ошибка.
Другая проблема, я не могу использовать db.ExecuteSqlCommand
, потому что не могу установить Microsoft.EntityFrameworkCore
, потому что есть некоторые несовместимые файлы в соответствии с nuget.
Я мог бы создать новую таблицу, которая просто использовалась для временного хранения этой новой ticketNumber
Я создаю, но чувствовал, что, возможно, есть лучший способ, поэтому я обращаюсь к вам, чтобы узнать, есть ли у вас какие-нибудь гениальные идеи: D
Что касается направления параметра, я понятия не имею.
Приветствия
РЕДАКТИРОВАТЬ: я закончил отбрасывать эту идею и вместо этого использовал триггер в самой таблице для вызова процедуры ипоместите результат в новую строку в правильном столбце.И это сработало как шарм.