Возвращает нулевое значение в запросе EF6 с помощью sql server

#c# #asp.net #sql-server #entity-framework

#c# #asp.net #sql-сервер #entity-framework

Вопрос:

Я использую Sp для создания некоторой логики и возврата объекта таблицы.Если объект не найден, я просто возвращаю значение null объекта

 CREATE proc SpDealerDistributionOracle 
(
    @DealerCode varchar(50),
    @imei varchar(50)
) 
as
BEGIN
    if (some logic)
        select  top 1 * from tblBarCodeInv
    else 
        select null;
END
  

Работает нормально..Но когда я написал запрос в EF 6 следующим образом

  tblBarCodeInv returnValue = null;
 using (var db=new RBSYNERGYEntities())
 {
       String query = String.Format("SpDealerDistributionOracle 'DealerCode','101001'");
       returnValue = db.Database.SqlQuery<tblBarCodeInv>(query).FirstOrDefault();                  
 }
 return returnValue;
  

Он выдает исключение.

Я просто хочу вернуть объект, если он не найден, вернуть значение null и выполнить некоторую логику в C #.Кто-нибудь может помочь??

Комментарии:

1. Но мне нужно использовать Sp.As вы знаете, что Sps предварительно скомпилированы, а функции — нет. Их может быть более 50000 операций в день. Так что лучше использовать sp

2. Проверьте эту ссылку

3. Это полное использование, но не мой вопрос. Я просто возвращаю null, если запись не найдена.. Когда я возвращаю его, он выдает исключение, что требуется RecId (первичный ключ)

Ответ №1:

Измените свою процедуру, чтобы она по-прежнему возвращала «коллекцию» в обоих случаях. Однако во втором случае это будет пустая коллекция и, таким образом, достигнет значения «По умолчанию» для FirstOrDefault

 BEGIN    
    if (some logic)
        select  top 1 * from tblBarCodeInv
    else 
        SELECT TOP 0 * from tblBarCodeInv 
END
  

Комментарии:

1. {"The data reader is incompatible with the specified 'RBSYNERGYModel.tblBarCodeInv'. A member of the type, 'RecID', does not have a corresponding column in the data reader with the same name."} найдено на моей машине

2. @syedmhamudulhasanakash — Я рекомендую вам отредактировать свой вопрос, чтобы добавить исходное сообщение об ошибке — это то, что люди будут искать в Google — и именно так ваш вопрос поможет в будущем

3. @syedmhamudulhasanakash — Рад помочь 🙂