我正在尝试在mvc中编写一些代码以通过id获取userdata。这里我使用的Viewmodel类包含所有参数作为Database表。我正在使用企业库来执行存储过程。这是我试过的数据访问层中的代码..
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类。我希望代码执行存储过程.. 谢谢..
答案 0 :(得分:1)
如果要在不手动构建自定义类型的情况下(从DataSet或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中一样创建参数映射器。