2011-06-28 13 views
2

私はEF4とWCF Data Servicesで働いていると動作しません。私は現在のSQL接続を取り、このメソッドを使用して再接続して、さまざまなクライアント(モバイル、Web、Winクライアント)からデータにアクセスできるようにしたいと考えています。私はLINQを使うことができることを知っていますが、私はちょうど格納されたprocsを代わりに使用することについて不思議だった。ここでストアドプロシージャは、EF 4.0とWCF Data Servicesの

は私のサンプルストアドプロシージャです:私TestDataService.svc

CREATE procedure getuserbyID (
@UserID int) 
AS 
SELECT Firstname, Lastname, Email From TestDatabase WHERE UserID = @UserID 

、私はInitialServiceに次き:

config.SetEntitySetAccessRule("Users", EntitySetRights.All); 
config.SetServiceOperationAccessRule("GetUserByID", ServiceOperationRights.All 

ここに記載されているように私はまた、ファイル内のストアドプロシージャを呼び出します。

[WebGet] 
public List<User> GetUserByID(string UserID) 
{ 
    TestEntities entity = new TestEntities(); 
    return entity.GetUserByID(Convert.ToInt32(UserID)).ToList(); 
} 

私のEFモデルでは、ストアドプロシージャを関数としてインポートしました。 GetUserByIDとし、Userエンティティを返します。

私はそれをテストするとき、私は使用してブラウザで表示することにより、エンティティにアクセスすることができる午前: http://localhost:1753/TestWcfDataService.svcまたはhttp://localhost:1753/TestWcfDataService.svc/Usersまたはhttp://localhost:1753/TestWcfDataService.svc/Users(1)を - UserID 1の

とサンプルのユーザー私はそれはLINQで働いている知っているとODATAを使用してアクセスしますが、これを介してストアドプロシージャにアクセスしようとすると:

- ページが表示されないというHTTP 500エラーが発生します。私はそれをデバッグすると、私はエラーを表示し、ここにある:

System.Data.EntityCommandExecutionException は、ユーザーコードメッセージによって未処理だった= データリーダーは「TestModel.User」が指定 と互換性がありません。部材タイプの 、「ユーザID」、同じ名前を持つデータ リーダーに対応する列を有していません。

UserIDUsersテーブルの私の主キーとアイデンティティです。どんな助力も大変ありがとうと思います。

+0

だけの推測が、あなたのストアドプロシージャは、ユーザー・エンティティのように見えるの列を返しますが、彼らは重要な財産のユーザーIDが含まれていません。エンティティを具体化するためには、EFが重要な財産価値を必要としていると思います。ストアドプロシージャから列の1つとしてUserIDを返そうとしましたか? –

答えて

0

私は、エラーを発見し、あなたの時間を無駄にして申し訳ありません。私の事件の事故。 UserIDが私のプライマリキーであるため、私は選択基準でそれを使用していないため、データリーダーに列がありませんでした。したがって、要約すると:すべてのフィルタ条件がストアドプロシージャの選択条件にも表示されていることを確認します。私の格納されたprocを(以下)に変更するだけです。

CREATE procedure getuserbyID 
(@UserID int) 
AS 
SELECT UserID, Firstname, Lastname, Email From TestDatabase WHERE UserID = @UserID 
関連する問題