我正在使用EF4和WCF數據服務。我想採用當前的SQL連接並使用此方法重新連接它,以便可以訪問各種客戶端(移動設備,Web,Win Client)的數據。我知道我可以使用LINQ,但我只是想知道如何使用存儲過程。存儲過程不適用於EF 4.0和WCF數據服務
這裏是我的示例存儲過程:
CREATE procedure getuserbyID (
@UserID int)
AS
SELECT Firstname, Lastname, Email From TestDatabase WHERE UserID = @UserID
在我TestDataService.svc
,我有在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模型中,我導入了存儲過程作爲函數和s將其作爲GetUserByID
並返回User
實體。
當我測試了一下,我能夠通過使用瀏覽器中查看它來訪問實體: http://localhost:1753/TestWcfDataService.svc
或http://localhost:1753/TestWcfDataService.svc/Users
或http://localhost:1753/TestWcfDataService.svc/Users(1)
- 用1
一個UserID
我知道它的工作與LINQ樣本用戶ODATA通過服務,但當我嘗試訪問存儲過程通過此:
- 然後我得到一個HTTP 500錯誤,該頁面無法顯示。我調試它,我查看錯誤和這裏是:
System.Data.EntityCommandExecutionException 是由用戶代碼消息未處理=該 數據讀取器是與指定的「TestModel.User」的 不相容。 「用戶ID」類型的成員 在數據 閱讀器中沒有 對應列,名稱相同。
UserID
是我在Users
表中的主鍵和標識。任何幫助將不勝感激,並提前感謝您。
只是猜測,但您的存儲過程返回看起來像User實體的列,但它們不包含關鍵屬性UserID。我認爲EF需要關鍵的財產價值才能實現實體。您是否嘗試將UserID作爲存儲過程中的一列返回? –