2012-03-11 14 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

GetTopEmployeeの戻り値の型がObjectResult<Nullable<int>>であることに注意してください。 ObjectResult<T>IEnumerable<T>を実装していますので、あなたのメソッドは複数のNullable<int>を返すことができます。

私はあなたが従業員のために何らかの形のIDを取得しようとしていると仮定します。 1つの結果しか得られないと確信しているのであれば、次のコードを使ってそのIDを取得することができます。

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

topId nullでもかまいません。 int結果を得るには、topId.Valueまたはvar result = topId ?? -1;を使用する必要があります。

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

もし結果が1つだけならば、db.GetTopEmployee( ).First() '、または別の言い方をすると、結果が返されなかった場合に例外を受け取る場合は、これを使用します。 – xr280xr

関連する問題