我正在尝试调用一个接受表值参数的存储过程。我知道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
提交
取消