私は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」、同じ名前を持つデータ リーダーに対応する列を有していません。
UserID
はUsers
テーブルの私の主キーとアイデンティティです。どんな助力も大変ありがとうと思います。
だけの推測が、あなたのストアドプロシージャは、ユーザー・エンティティのように見えるの列を返しますが、彼らは重要な財産のユーザーIDが含まれていません。エンティティを具体化するためには、EFが重要な財産価値を必要としていると思います。ストアドプロシージャから列の1つとしてUserIDを返そうとしましたか? –