为了账号安全,请及时绑定邮箱和手机立即绑定

实体框架存储过程表值参数

实体框架存储过程表值参数

C#
桃花长相依 2019-09-21 13:35:26
我正在尝试调用一个接受表值参数的存储过程。我知道Entity Framework尚不直接支持此功能,但是据我了解,您可以使用的ExecuteStoreQuery命令来实现ObjectContext。我有一个通用实体框架存储库,其中有以下ExecuteStoredProcedure方法:public IEnumerable<T> ExecuteStoredProcedure<T>(string procedureName, params object[] parameters){    StringBuilder command = new StringBuilder();    command.Append("EXEC ");    command.Append(procedureName);    command.Append(" ");    // Add a placeholder for each parameter passed in    for (int i = 0; i < parameters.Length; i++)    {        if (i > 0)            command.Append(",");        command.Append("{" + i + "}");    }    return this.context.ExecuteStoreQuery<T>(command.ToString(), parameters);}命令字符串最终如下所示:EXEC someStoredProcedureName {0},{1},{2},{3},{4},{5},{6},{7}我试图在接受表值参数的存储过程中运行此方法,但它会中断。我在这里读到,参数必须是类型SqlParameter,而表值参数需要将其SqlDbType设置为Structured。所以我这样做了,并得到一个错误说明:The table type parameter p6 must have a valid type name因此,我将SqlParameter.TypeName设置为在数据库上创建的用户定义类型的名称,然后在运行查询时收到以下真正有用的错误:Incorrect syntax near '0'.如果我恢复到ADO.NET并执行数据读取器,则可以使查询运行,但是我希望可以使用数据上下文使它正常工作。有没有办法使用传递表值参数ExecuteStoreQuery?另外,我实际上使用的是Entity Framework Code First,并将强制转换DbContext为ObjectContext以获得ExecuteStoreQuery可用的方法。这是否有必要,或者我也可以针对DbContext?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 505 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信