执行viewmodel class returntype的存储过程

时间:2016-02-10 18:25:42

标签: asp.net-mvc enterprise-library

我正在尝试在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类。我希望代码执行存储过程.. 谢谢..

1 个答案:

答案 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中一样创建参数映射器。