2012-03-11 10 views
32

W Entity Framework 4 napotykam problem, gdy używam funkcji import do procedury składowanej, a następnie jako wartość skalarna. Generuje poniższy kod:Jak radzić sobie z ObjectResult w Entity Framework 4

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

Jak korzystać z wartości zwracanej tej metody?

Na przykład, ten kod działa poprawnie:

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

Ale chcę użyć wartości zwracane tylko jako int. Jeśli użyję zwracanej wartości jako non while w funkcji import, to daje -1 jako wynik.

Kiedy próbuję poniższy kod:

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

zgłasza błąd mówiąc:

nie można niejawnie przekonwertować typu 'System.Data.Objects.ObjectResult' do 'int'

Jak przeanalizować powyższe?

+1

Co to jest kod, który daje "-1" jako wynik? Nie rozumiem "zwracanej wartości jako non while in function import". –

+0

Mam na myśli to, czy dostroję moją procedurę przechowywaną poprzez import funkcji, a następnie oznaczy wartość zwracaną jako brak, to da mi -1 jako wynik – user1037747

Odpowiedz

77

Należy zauważyć, że typem zwrotu GetTopEmployee jest ObjectResult<Nullable<int>>. ObjectResult<T> implementuje IEnumerable<T>, więc twoja metoda jest w stanie zwrócić więcej niż jeden Nullable<int>.

Zakładam, że próbujesz uzyskać dla pracownika jakąś formę identyfikatora. Jeśli masz absolutną pewność, że uzyskasz tylko jeden wynik, możesz użyć następującego kodu, aby uzyskać ten identyfikator.

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

topId może być pusty. Będziesz musiał użyć topId.Value lub var result = topId ?? -1;, aby uzyskać wynik int.

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

Jeśli jesteś absolutnie pewien, że zamierzasz uzyskać jeden wynik, powinieneś użyć 'db.GetTopEmployee () .First() 'lub inaczej, użyj tego, jeśli chcesz otrzymać wyjątek, jeśli nie zostaną zwrócone żadne wyniki. – xr280xr

Powiązane problemy