2013-08-27 4 views
1

Я пытаюсь выполнить хранимую процедуру в моем проекте, но перечисление не дает никаких результатов.Перечисление хранимой процедуры не дает никаких результатов

Почему? Что я делаю не так?

Информация о моем проекте:

.NET Framework 4.5 
<package id="EntityFramework" version="5.0.0" targetFramework="net45" /> 
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) 

вручную с помощью хранимых процедур работы и возвращает корректные данные:

DECLARE @return_value int 

EXEC @return_value = [dbo].[GetFeatures] 
     @XMLDoc = N'<ArrayOfInt><int>280</int><int>286</int><int>279</int><int>292</int><int>277</int></ArrayOfInt>', 
     @ReleaseId = 340 

SELECT 'Return Value' = @return_value 

Вот где я выполняю хранимую процедуру в моем коде:

public ObjectResult<GetFeatures_Result> GetFeatures(List<int> featureIds, int releaseId, int? timeboxId, int? teamId) 
{ 
    string xmlFeatureIds = null; 

    var xs = new XmlSerializer(typeof(List<int>)); 
    var ms = new MemoryStream(); 
    xs.Serialize(ms, featureIds.ToList()); 

    //xmlFeatureIds = Encoding.UTF8.GetString(ms.ToArray()); 
    xmlFeatureIds = "<ArrayOfInt><int>280</int><int>286</int><int>279</int><int>292</int><int>277</int></ArrayOfInt>"; 
    //releaseId = 340; 
    var release = _rmContext.Releases.FirstOrDefault(x => x.Id == releaseId);//works, Releases is just a table 
    var obj = _rmContext.GetFeatures(xmlFeatureIds, releaseId, null, null); //enumeration didn't yield any results 
    var obj2 = _rmContext.GetFeatures(xmlFeatureIds, releaseId, null, null).ToList(); //length of this is zero. 

    return obj; 
} 

Установка модели браузера и визуальной студии: enter image description here

EDIT:

Из SQL Profiler:

declare @p1 xml 
set @p1=convert(xml,N'<ArrayOfInt><int>280</int><int>286</int><int>279</int><int>292</int><int>277</int></ArrayOfInt>') 
exec [dbo].[GetFeatures] @[email protected],@ReleaseId=340,@TimeBoxId=NULL,@TeamId=NULL 
+0

Вся информация, которую вы предоставили, танцует вокруг проблемы. Используйте Profiler Sql Server Management Studio для перехвата SQL, который отправляется EF на SQL Server и публикует его. –

+0

Я никогда не использовал его раньше, но попробую его сейчас и вернусь к вам в случае необходимости как можно скорее. Спасибо – Robodude

+0

Сколько результатов возвращается при выполнении SP непосредственно против базы данных; вне вашего приложения C#? – Servy

ответ

1

Запрос отправлен из приложения передает явное значение NULL для параметров @TimeBoxId и @TeamId.

Тот, который вы тестируете в SSMS, полностью игнорирует эти параметры.

Если параметры имеют значения по умолчанию, они применяются только при отсутствии параметров или задано ключевое слово DEFAULT.

Это объясняет разницу в поведении.

Я не уверен, есть ли способ получить запрос сгенерированного EF, но вы можете либо изменить приложение для передачи желаемых значений по умолчанию 0 вместо NULL, либо изменить хранимую процедуру, чтобы первый шаг является.

SET @TimeBoxId = ISNULL(@TimeBoxId,0) 
SET @TeamId = ISNULL(@TeamId,0) 
Смежные вопросы