복붙노트

[SQL] 엔티티 프레임 워크 - 저장 프로 시저의 반환 값

SQL

엔티티 프레임 워크 - 저장 프로 시저의 반환 값

내가 저장 프로 시저의 반환 값을 얻기 위해 노력하고 있어요. 여기서 이러한 프로 시저의 예이다 :

select
    Name,
    IsEnabled
from
    dbo.something
where
    ID = @ID

if @@rowcount = 0
    return 1    

return

이것은 간단한 선택이다. 0 행이 발견되면 내 결과 집합은 널 (null)이 될 것입니다,하지만 난 여전히 반환 값을 갖게됩니다.

이 0 행이 반환된다면 그렇게 확신 내가 찾을 수있는, 선별이기 때문에 이것은 나쁜 예입니다. 그러나 삽입에 삭제하거나 다른 호출, 문제가 발생했을 경우 알이 반환 값이 필요합니다. 나는이 반환 값을 얻을 수있는 방법을 찾을 수 없었습니다. 나는 결과 집합을 얻을 수, 출력 값을 얻을,하지만 반환 값 수 있습니다.

내가 수동으로 SQL을 호출하는 경우 I는 반환 값을 얻을 수있는, 또는 내가 엔티티 프레임 워크를 사용하는 SqlCommand를 실행하는 경우에도, 그러나 이것은 내가 원하는 것이 아니다.

누구도 엔티티 프레임 워크를 사용하여 저장 프로 시저의 반환 값을 얻을 수있다?

도와 주셔서 감사합니다!

해결법

  1. ==============================

    1.제 엔티티 프레임 워크는 풍부한 저장 프로 시저 지원의 ORM 때문이 아니라 SQL 교체가 없습니다.

    제 엔티티 프레임 워크는 풍부한 저장 프로 시저 지원의 ORM 때문이 아니라 SQL 교체가 없습니다.

    이미 발견 한 것처럼 (고급?) 저장 프로 시저의 기능을 많이 사용을 사용해야 할 경우, 당신은 좋은 구식 ADO.NET을 사용해야합니다.

  2. ==============================

    2.저장 프로 시저의 반환 값의 I 추측 지원은 엔티티 프레임 워크의 버전에 따라 다릅니다. 직접 반환 값이 나를 위해 작동하지 않았지만 나는 OUTPUT 저장 프로 시저 매개 변수를 사용하여 값을 얻을 수 있었다. 예:

    저장 프로 시저의 반환 값의 I 추측 지원은 엔티티 프레임 워크의 버전에 따라 다릅니다. 직접 반환 값이 나를 위해 작동하지 않았지만 나는 OUTPUT 저장 프로 시저 매개 변수를 사용하여 값을 얻을 수 있었다. 예:

    USE [YOUR_DB_NAME]
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[TestReturnValue]
        @InputValue int = 0,
        @Result int OUTPUT
    AS
    BEGIN
        SET NOCOUNT ON;
        SELECT @Result  = @InputValue
        RETURN(@InputValue);
    END
    

    이 테스트 코드입니다 :

    void TestReturnValue()
    {
        using (var db = new YourDBContext())
        {
            var result = new System.Data.Objects.ObjectParameter("Result", 0);
            Console.WriteLine("SP returned {0}", db.TestReturnValue(123, result));
            Console.WriteLine("Output param {0}", result.Value);
        }
    }
    

    그리고 이것은 출력은 다음과 같습니다

    SP returned -1
    Output param 123
    

    직접 값 출력에게 약간의 쓰레기 만 출력 매개 변수 작품을 돌아 보는 바와 같이!

    이 문서에서는 SP의 값을 반환하는 두 가지 방법에 대한 일반 정보를 제공합니다

    도움이 되었기를 바랍니다

  3. ==============================

    3.내가 엔티티 프레임 워크 5 (또한 출력 및 입력 매개 변수) 반환 값을 얻을 수 있었다 (하지만 난 그게 버전 4.x에서 작동 생각) 코드 첫 번째 방법을 사용. 귀하의 게시물에서 나는 당신이 사용하는 방법 당신은 당신의 매핑을하고있는 EF의 버전을 확인하지 않는다; 여기에 코드 첫 번째 방법을 사용하는 것이 고려한다면 당신은 솔루션 내 게시물을 찾을 수 있습니다 :

    내가 엔티티 프레임 워크 5 (또한 출력 및 입력 매개 변수) 반환 값을 얻을 수 있었다 (하지만 난 그게 버전 4.x에서 작동 생각) 코드 첫 번째 방법을 사용. 귀하의 게시물에서 나는 당신이 사용하는 방법 당신은 당신의 매핑을하고있는 EF의 버전을 확인하지 않는다; 여기에 코드 첫 번째 방법을 사용하는 것이 고려한다면 당신은 솔루션 내 게시물을 찾을 수 있습니다 :

    저장 프로 시저에서 반환 값을 가져옵니다

  4. ==============================

    4.당신은 "Context.Database.SqlQuery"를 사용하고, 저장 프로 시저의 출력 유형을 지정해야합니다

    당신은 "Context.Database.SqlQuery"를 사용하고, 저장 프로 시저의 출력 유형을 지정해야합니다

            var spReturnVaue = Context.Database.SqlQuery<Type>("[schema].YourSp").FirstOrDefault();
    
            int firstId = Context.Database.SqlQuery<int>("[dbo].GetFirstId").FirstOrDefault();
    
  5. ==============================

    5.EF의 관심이 결과를 얻으려면, 당신은 동일한 구조를 반환해야합니다 (하지 1 명,의 IsEnabled) 이 쿼리에서는이 경우 상태 예 대신 1 ','0을 반환해야합니다 :

    EF의 관심이 결과를 얻으려면, 당신은 동일한 구조를 반환해야합니다 (하지 1 명,의 IsEnabled) 이 쿼리에서는이 경우 상태 예 대신 1 ','0을 반환해야합니다 :

    select
        Name,
        IsEnabled
    from
        dbo.something
    where
        ID = @ID
    
    if @@rowcount = 0
        return '',0
    
  6. from https://stackoverflow.com/questions/10339750/entity-framework-stored-procedure-return-value by cc-by-sa and MIT license