2016-02-10 62 views
0

我想在mvc中編寫一些代碼以通過id獲取userdata。這裏我使用包含所有參數的Viewmodel類作爲數據庫表。我正在使用企業庫來執行存儲過程。這裏是我的數據訪問層中的代碼,我試過..爲viewmodel類執行存儲過程returntype

public UserEntity GetUserByID(int userID) 
    { 
     DatabaseProviderFactory factory = new DatabaseProviderFactory(); 
     Database db = factory.Create("MySqlConnection");  
     DbCommand dbc = db.GetStoredProcCommand("uspGetUserByID"); 
     dbc.CommandType = CommandType.StoredProcedure; 
     db.AddInParameter(dbc, "userID", DbType.Int32, userID); 
     return db.ExecuteDataSet(dbc).Tables[0];   
    } 

這裏UserEntity是我的viewmodel類。這裏Executedataset不起作用,因爲returntype不是數據集,而是viewmodel類。我想要的代碼,以執行存儲過程.. 謝謝你..

回答

1

如果你想無需手動構建它(無論是從數據集或IDataReader的)回報您的自定義類型,那麼你可以使用訪問器。

在你的情況是這樣的:

public UserEntity GetUserByID(int userID) 
{ 
    DatabaseProviderFactory factory = new DatabaseProviderFactory(); 
    Database db = factory.Create("MySqlConnection"); 
    IEnumerable<UserEntity> results = db.ExecuteSprocAccessor<UserEntity>("uspGetUserByID", userID); 

    return results.FirstOrDefault(); 
} 

這假定UserEntity可以從存儲過程的結果集映射(例如列名稱是相同的名稱屬性名)。如果沒有,那麼你需要create a custom mapper。有關訪問者的更多信息,請參閱開發人員指南中的Retrieving Data as Objects。另外,如果在傳遞userID參數時出現問題,那麼您可能必須創建參數映射器,如Defining Parameter Mappers

+0

我收到一條錯誤消息......數據庫類型「Microsoft.Practices.EnterpriseLibrary.Data.GenericDatabase」不支持自動參數發現。使用IParameterMapper代替' – thiru

+0

然後,您將不得不創建一個參數映射器,如上面最後一句中所述。 –