SqlParameter возвращает ноль в Entity Framework SqlQuery - PullRequest
0 голосов
/ 13 января 2012

Я материализую сущности с помощью хранимой процедуры в Entity Framework Code-First. Хранимая процедура принимает параметр int и выводит как выборку записей, так и несколько выходных параметров. По какой-то причине я возвращаю Null обратно к своим выходным параметрам, в то время как выполнение Proc из студии SQL Management приводит к ожидаемому поведению; все выходные параметры имеют значения. Мои сущности материализуются, так что, по крайней мере, это работает ...

Код 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 Profiler

SQL, сгенерированный из метода SqlQuery, приведен ниже. Я запечатлел это в 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 или как?

1 Ответ

1 голос
/ 13 января 2012

Вы должны использовать ключевое слово OUT в SQL, переданном в SqlQuery (пример здесь ). Также убедитесь, что вы читаете эти параметры после итерации или закрытия основного результирующего набора запроса (это должно быть сделано конструктором ObservableCollection).

...