SqlParameter在实体框架SqlQuery中返回null

本文关键字:返回 null SqlQuery 框架 实体 SqlParameter | 更新日期: 2023-09-27 18:20:17

我通过实体框架代码优先中的存储过程来具体化实体。存储过程采用一个int参数,并输出一组记录和几个输出参数。无论出于何种原因,在执行SQL Management studio中的Proc时,我的输出参数会返回Null,从而导致预期的行为;所有输出参数都有值。我的实体正在被物化,所以至少这是有效的。。。

EF代码

        SqlParameter DocsWithHits = new SqlParameter()
        {
            ParameterName = "DocumentsWithHits",
            Direction = System.Data.ParameterDirection.Output,
            Value = null,
            SqlDbType = System.Data.SqlDbType.Int
        };
        SqlParameter TotalGB = new SqlParameter()
        {
            ParameterName = "TotalGb",
            Direction = System.Data.ParameterDirection.Output,
            Value = null,
            SqlDbType = System.Data.SqlDbType.Float
        };
        ObservableCollection<SearchResult> ResultCollection;
        ResultCollection = new ObservableCollection<SearchResult>(db.Database.SqlQuery<SearchResult>(
            "exec ListSearchResultsWithTotals @SearchAnalysisID, @DocumentsWithHits, @RelatedDocuments, @TotalDocuments, @TotalGb, @DocumentsWithHitsNotExported, @RelatedDocumentsNotExported, @TotalDocumentsNotExported, @TotalGbNotExported",
            new SqlParameter
            {
                ParameterName = "SearchAnalysisID",
                Value = this.SearchAnalysisId
            },
            DocsWithHits,
            TotalGB));

SQL事件探查器

下面是从SqlQuery方法生成的SQL。我在Profiler中捕捉到了它。当执行时,我得到记录和空输出参数。

declare @p4 int
set @p4=NULL
declare @p5 float
exec sp_executesql N'exec ListSearchResultsWithTotals @SearchAnalysisID, @DocumentsWithHits, @TotalGb',N'@SearchAnalysisID int,@DocumentsWithHits int output,@TotalGb float output',@SearchAnalysisID=170,@DocumentsWithHits=@p4 output,@TotalGb=@p5 output
select @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11

我是不是用错了SqlParameter?

SqlParameter在实体框架SqlQuery中返回null

必须在传递给SqlQuery的SQL中使用OUT关键字(此处为示例)。还要确保在迭代或关闭查询的主要结果集后读取这些参数(应该由ObservableCollection构造函数完成)。