Как вызвать хранимую процедуру, которая возвращает данные, используя Entity Framework и .Net Core 1.1

Я пытаюсь вызвать хранимую процедуру, которая возвращает значение. Но по какой-то причине он не возвращает значение, а вместо этого выдает ошибку:

введите здесь описание изображения

Я вызываю хранимую процедуру следующим образом:

var arTransactionid = context.Set<ARTransaction>()
                             .FromSql("core.ARTransaction_Insert @PersonID = {0},@ContractID = {1},@TransactionCodeID = {2},@TransactionDate = {3}," +
        "@TransactionDesc = {4},@Amount = {5},@CurrencyID = {6},@ExchangeRate = {7}," +
        "@BaseAmount = {8},@PostedDate = {9},@DueDate = {10},@Reference = {11}," +
        "@Reference2 = {12},@Reversal = {13},@BaseAdjustment = {14},@BatchID = {15}," +
        "@ParentTransactionID = {16},@InvoiceID = {17},@UserID = {18}", 46736, null, 197, "2017-08-25 00:00:00 -05:00", null, 501.0000, 2, 1, 501.0000, null, null, null, null, 0, 0, null, 0, null, 3052)
                             .FirstOrDefault();

Это мой класс модели, который должен быть заполнен возвращаемым значением из хранимой процедуры:

public class ARTransaction
{
    public String arTransactionID { set; get; }
}

Это хранимая процедура:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [core].[ARtransaction_Insert]
    @PersonID int,
    @ContractID int,
    @TransactionCodeID int,
    @TransactionDate date,
    @TransactionDesc nvarchar(100),
    @Amount money,
    @CurrencyID int,
    @ExchangeRate decimal(18,6),
    @BaseAmount money,
    @PostedDate DATE = null,
    @DueDate date,
    @Reference nvarchar(50),
    @Reference2 nvarchar(50),
    @Reversal BIT = 0,
    @BaseAdjustment BIT = 0,
    @BatchID int,
    @ParentTransactionID int,
    @InvoiceID INT = null,
    @UserID INT,
    @SessionGUID UNIQUEIDENTIFIER = null
AS
    SET NOCOUNT ON

    DECLARE @ARtransactionID INT,
            @Valid INT,
            @ValidMessage NVARCHAR(100)

    --More code goes here ***********

    RETURN @ARtransactionID

Если я вызываю хранимую процедуру в SQL Server Management Studio, она не возвращает значение — просто сообщение.

введите здесь описание изображения

Чтобы получить результат, я объявляю переменную и присваиваю ее хранимой процедуре.

DECLARE @arTransctionInserted int;

EXEC @arTransctionInserted = core.ARTransaction_Insert 
          @PersonID = 46736,
          @ContractID = NULL,
          @TransactionCodeID = 197,
          @TransactionDate = '2017-08-25 00:00:00 -05:00',
          @TransactionDesc = NULL,
          @Amount = 500.0000,
          @CurrencyID = 2,
          @ExchangeRate = 1, 
          @BaseAmount = 500.0000,
          @PostedDate = NULL,
          @DueDate = NULL,
          @Reference = NULL,
          @Reference2 = NULL,
          @Reversal = 0,
          @BaseAdjustment = 0,
          @BatchID = NULL,
          @ParentTransactionID = 0,
          @InvoiceID = NULL,
          @UserID = 3052;

SELECT @arTransctionInserted as IDTransaction;

введите здесь описание изображения

Как я могу вызвать хранимую процедуру для возврата значения?

context.Set<ARTransaction>().FromSql("")

Я уже пытался вызвать его, включая весь запрос, но ошибка продолжает выдаваться.

var arTransactionid = context.Set<ARTransaction>().FromSql("DECLARE @arTransctionInserted int; exec @arTransctionInserted = core.ARTransaction_Insert @PersonID = {0},@ContractID = {1},@TransactionCodeID = {2},@TransactionDate = {3}," +
               "@TransactionDesc = {4},@Amount = {5},@CurrencyID = {6},@ExchangeRate = {7}," +
               "@BaseAmount = {8},@PostedDate = {9},@DueDate = {10},@Reference = {11}," +
               "@Reference2 = {12},@Reversal = {13},@BaseAdjustment = {14},@BatchID = {15}," +
               "@ParentTransactionID = {16},@InvoiceID = {17},@UserID = {18};SELECT @arTransctionInserted as IDTransaction;", 46736, null, 197, "2017-08-25 00:00:00 -05:00", null, 501.0000, 2, 1, 501.0000, null, null, null, null, 0, 0, null, 0, null, 3052).FirstOrDefault();

person mavi    schedule 30.08.2017    source источник
comment
Можете ли вы опубликовать свой оператор select внутри sproc здесь?   -  person Nathan    schedule 30.08.2017
comment
Вы имеете в виду недостающую часть SP?   -  person mavi    schedule 30.08.2017
comment
Да, было бы очень полезно проверить это.   -  person Nathan    schedule 30.08.2017
comment
Единственная отсутствующая часть — это место, где я присваиваю значение для **code ARtransactionID Exec ARtransactionID = core.ARtransaction_Insert **   -  person mavi    schedule 30.08.2017


Ответы (1)


RETURN не будет выводить значения SP, а только вернет данные, которые будут помещены в переменную вызывающего объекта базы данных. Вот почему EXECUTE работает, но запуск самой SP просто возвращает «Команда выполнена успешно».

Используйте SELECT @ARtransactionID;, так как это должно вывести идентификатор, который вы ищете.

person Nathan    schedule 30.08.2017