2012-03-11 2 views
32

Entity Framework 4에서는 저장 프로 시저로 함수 가져 오기를 사용한 다음 스칼라 값으로 사용할 때 문제가 발생합니다. 아래 코드를 생성합니다 :Entity Framework 4의 ObjectResult를 처리하는 방법

public virtual ObjectResult<Nullable<int>> GetTopEmployee() 
{ 
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>("GetTopEmployee"); 
} 

이 메서드의 반환 값은 어떻게 사용합니까?

예를 들어,이 코드는 잘 작동 :

NorthwindEntities db = new NorthwindEntities(); 
var i = db.GetTopEmployee(); 

하지만 난 단지 int로서 반환 값을 사용하고 싶습니다. 함수 가져 오기에서 반환 값을 non가 아닌 것으로 사용하면 출력에 -1이 반환됩니다.

나는 아래의 코드하려고 할 때 :

암시 'INT'

에 유형 'System.Data.Objects.ObjectResult을'변환 할 수 없습니다 :

NorthwindEntities db2 = new NorthwindEntities(); 
int j = db.GetTopEmployee(); 

그것은 말에서 오류가 발생을

위 구문은 어떻게 해석합니까?

+1

출력에'-1'을주는 코드는 무엇입니까? 나는 "함수 가져 오기에서 비 반환 값"을 이해하지 못합니다. –

+0

함수 가져 오기를 통해 저장 프로 시저를 다시 조정 한 다음 반환 값을 none으로 표시하면 결과가 -1로 출력됩니다. – user1037747

답변

77

반환 유형 GetTopEmployeeObjectResult<Nullable<int>>입니다. ObjectResult<T>IEnumerable<T>을 구현하므로 메서드가 두 개 이상 Nullable<int>을 반환 할 수 있습니다.

직원의 ID 양식을 얻으려고한다고 가정합니다. 만약 당신이 절대적으로 하나의 결과를 얻으 려한다면 다음 코드를 사용하여 그 ID를 얻을 수 있습니다.

var topId = db.GetTopEmployee().FirstOrDefault(); 

topId 일 수 있습니다. int 결과를 얻으려면 topId.Value 또는 var result = topId ?? -1;을 사용해야합니다.

NorthwindEntities db = new NorthwindEntities(); 
    int j = db.GetTopEmployee().FirstOrDefault() ?? -1; 
+0

하나의 결과를 얻으려면 반드시 db.GetTopEmployee () .First()'또는 다르게 넣으면 결과가 반환되지 않을 경우 예외를 받기를 원한다면 이것을 사용하십시오. – xr280xr

관련 문제