Tsql 使用参数获取存储过程结果时出现EF6语法错误

Tsql 使用参数获取存储过程结果时出现EF6语法错误,tsql,sql-server-2005,asp.net-mvc-5,entity-framework-6,Tsql,Sql Server 2005,Asp.net Mvc 5,Entity Framework 6,我不明白为什么在执行这行代码时会出现语法错误: return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Kitti_getProductGroupDetail_Result>("Kitti_getProductGroupDetail @ProductGroupId", @params); ProductGroupId肯定正在被填充。EF不喜欢我的代码的什么地方?我有一个类似的方法,它不需要参数来执行存

我不明白为什么在执行这行代码时会出现语法错误:

return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Kitti_getProductGroupDetail_Result>("Kitti_getProductGroupDetail @ProductGroupId", @params);
ProductGroupId肯定正在被填充。EF不喜欢我的代码的什么地方?我有一个类似的方法,它不需要参数来执行存储过程——它工作得很好

 // this works just fine
    public virtual ObjectResult<Kitti_getProductDetailsAndCategory_Result> Kitti_getProductDetailsAndCategory()
    {
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Kitti_getProductDetailsAndCategory_Result>("Kitti_getProductDetailsAndCategory");

        //ExecuteFunction changed to ExecuteStoreQuery
    }
//这很好用
公共虚拟对象结果Kitti_GetProductDetails和Category()
{
返回((IObjectContextAdapter)this.ObjectContext.ExecuteStoreQuery(“Kitti_GetProductDetails和Category”);
//ExecuteFunction更改为ExecuteStoreQuery
}
堆栈跟踪:

“Kitti_getProductGroupDetail”附近的语法不正确。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.Data.SqlClient.SqlException:“Kitti_getProductGroupDetail”附近的语法不正确

源错误:

第40行:}; 第41行: 第42行:返回((IObjectContextAdapter)this.ObjectContext.ExecuteStoreQuery(“Kitti_getProductGroupDetail@ProductGroupId”,@params); 第43行:} 第44行:

源文件:C:\Concrete\EFDbContext.cs行:42

堆栈跟踪:

[SqlException(0x80131904):“Kitti_getProductGroupDetail”附近的语法不正确。] System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,Action
1 wrapCloseInAction)+2444082
System.Data.SqlClient.SqlInternalConnection.OneError(SqlException异常,布尔断开连接,操作
1 wrapCloseInAction)+5775560 System.Data.SqlClient.TdsParser.throweexception和warning(TdsParserStateObject stateObj,布尔调用者连接锁,布尔异步关闭)+285 System.Data.SqlClient.TdsParser.TryRun(RunBehavior RunBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)+4169 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()+58 System.Data.SqlClient.SqlDataReader.get_MetaData()+89 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds、RunBehavior RunBehavior、String ResetOptions String、Boolean isInternal、Boolean ForDescriptionParameterEncryption)+409 System.Data.SqlClient.SqlCommand.RunExecuteReaderDS(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、Boolean async、Int32超时、任务和任务、Boolean asyncWrite、Boolean inRetry、SqlDataReader ds、Boolean describeParameterEncryptionRequest)+2127 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、String方法、TaskCompletionSource
1完成、Int32超时、任务和任务、Boolean和usedCache、Boolean asyncWrite、Boolean inRetry)+911
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior RunBehavior,Boolean returnStream,String方法)+64
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior,String方法)+240
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior)+41
System.Data.Common.DbCommand.ExecuteReader(CommandBehavior)+12
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.b_uc(DbCommand t,DbCommandInterceptionContext
1c)+14 System.Data.Entity.Infrastructure.InternalDispatcher
1.Dispatch(t目标目标,Func
3操作,TInterceptionContext拦截上下文,Action
3执行,Action
3执行)+72 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand命令,DbCommandInterceptionContext interceptionContext)+402 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior)+166 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior)+12 System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternal(String commandText,String entitySetName,ExecutionOptions ExecutionOptions,Object[]参数)+266 System.Data.Entity.Core.Objects.c_uuudisplayClass69
1.b_uu68()+44
System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func
1 Func,IDBEcutionStrategy executionStrategy,Boolean startLocalTransaction,Boolean releaseConnectionOnSuccess)+288 System.Data.Entity.Core.Objects.c__DisplayClass69
1.b__67()+167
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func
1操作)+190 System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryReliably(String commandText、String entitySetName、ExecutionOptions ExecutionOptions、Object[]参数)+462 System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQuery(String commandText,Object[]参数)+83 C:\KittiCutieFashion\KittiCutieFashion.Domain\Concrete\EFDbContext.Kitti\u getProductGroupDetail(Guid ProductGroupId)中的KittiCutieFashion.Domain\Concrete\EFDbContext.cs:42 C:\KittiCutieFashion\KittiCutieFashion.Domain\Concrete\EFDbContext.cs:82中的KittiCutieFashion.Domain.Concrete.EFDbContext.getProductDetailsFromSP(Guid ProductGroupId) 在C:\KittiCutieFashion\KittiCutieFashion.Domain\Concrete\EFProductDetailRepository.cs:33中获取\u ProductDetail() C:\KittiCutieFashion\KittiCutieFashion.WebUI.Controllers.ProductDetailController.ProductDetailView(字符串返回URL)中的KittiCutieFashion.WebUI\Controllers\ProductDetailController.cs:43 lambda_方法(闭包、控制器库、对象[])+103 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,对象[]参数)+14 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary
2参数)+157
System.Web.Mvc.ControllerActionInvoker.Invo
public System.Collections.Generic.IEnumerable<ProductDetail> getProductDetailsFromSP(Guid ProductGroupId)
{
    System.Collections.Generic.List<ProductDetail> productDetailList = new System.Collections.Generic.List<ProductDetail>();

    using (var context = new EFDbContext())
    {
        var result = context.Kitti_getProductGroupDetail(ProductGroupId);

        foreach (Kitti_getProductGroupDetail_Result res in result)
        {
             ProductDetail productDetail = new ProductDetail();
             productDetail.ProductId = res.productid;
             productDetail.SizeId = res.sizeid;
             productDetail.SizeDescription = res.sizedescription;
             productDetail.SizeRank = res.sizerank;
             productDetail.ColorId = res.colorid;
             productDetail.ColorDescription = res.colordescription;
             productDetail.ColorRank = res.colorrank;
             productDetail.QuantityRemainingInStock = res.quantityremaininginstock;
             productDetail.ProductGroupId = res.productgroupid;
             productDetail.ProductGroupName = "ProductGroupName is currently not in the stored procedure or in EF";
             productDetail.Description = res.description;

             productDetailList.Add(productDetail);
         }
     }

     return productDetailList;
 }
public partial class Kitti_getProductGroupDetail_Result
{
    public System.Guid productid { get; set; }
    public System.Guid productgroupid { get; set; }
    public string description { get; set; }
    public decimal price { get; set; }
    public Nullable<System.Guid> colorid { get; set; }
    public string colordescription { get; set; }
    public int colorrank { get; set; }
    public Nullable<System.Guid> sizeid { get; set; }
    public string sizedescription { get; set; }
    public int sizerank { get; set; }
    public int quantityremaininginstock { get; set; }
    public string productname { get; set; }
    public string imagesrc { get; set; }
}
ALTER PROCEDURE [dbo].[Kitti_getProductGroupDetail] 
@ProductGroupId uniqueidentifier



-- Insert statements for procedure here
SELECT product.ProductId as 'productid', product.ProductGroupId as 'productgroupid', product.[Description] as 'description'
, product.Price as 'price', product.ColorId as 'colorid', color.ColorDescription as 'colordescription', color.ColorRank as 'colorrank', 
product.SizeId as 'sizeid', size.SizeDescription as 'sizedescription', size.SizeRank as 'sizerank', product.QuantityRemainingInStock as 'quantityremaininginstock',
product.Name as 'productname', product.ProductImageSrc as 'imagesrc'
FROM dbo.Product product
INNER JOIN dbo.Color color
    on color.ColorId = product.ColorId
INNER JOIN dbo.Size size
    on size.SizeId = product.SizeId
INNER JOIN dbo.ProductGroup productgroup
    on productgroup.ProductGroupId = product.ProductGroupId
WHERE product.ProductGroupId = @ProductGroupId
AND product.QuantityRemainingInStock > 0
 // this works just fine
    public virtual ObjectResult<Kitti_getProductDetailsAndCategory_Result> Kitti_getProductDetailsAndCategory()
    {
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Kitti_getProductDetailsAndCategory_Result>("Kitti_getProductDetailsAndCategory");

        //ExecuteFunction changed to ExecuteStoreQuery
    }