Как вызвать функцию Oracle с возвращаемым значением с помощью LINQ to Entities?

Я работаю над приложением, которое обращается к данным из базы данных Oracle 11g. Я использую EF4, а доступ к данным осуществляется с помощью LINQ. I have come across a scenario where I need to call a function stored in a package. This function also has a return value. I have added this function to the entity data model but am unable to perform "Add Function Import" on it. Hence I'm unable to access it using LINQ. Как я могу вызвать эту функцию и получить ее возвращаемое значение?

Я задал этот вопрос некоторое время назад, но пока не получил на него ответа. В любом случае, я обновляю его некоторыми деталями, чтобы другим было удобно понять проблему и направить меня в правильном направлении. Я попытался реализовать решение, предложенное в этом вопросе , но получаю исключение.

Я добавил следующее в файл designer.cs моей модели данных объекта:

   [EdmFunction("TestModel.Store", "TestFunction")]
    public int TestFunction(decimal ALNR, decimal ATID, decimal AUKENR)
    {
        throw new ApplicationException();
    }

Ниже приводится небольшая часть файла edmx:



    
    
        
           
               
      
      
      
    

Вот как я вызываю эту функцию:

var selectQuery = from T in _context.Table1
                  join A in _context.Table2 on T.columnA equals A.columnB
                  join TU in _context.Table3 on T.columnC equals TU.columnD
                  where T.columnD == 5 && T.columnE == someVariable
                  select new someType
                  {
                      propertyA = A.columnG,
                      propertyB = _context.TestFunction(T.columnE, A.columnF, TU.columnH) 
                  };  

Но когда я выполняю любое из следующих действий:

ObservableCollection weekTotaldata = new ObservableCollection(selectQuery);  //Exception thrown at runtime

или

foreach (var ttu in selectQuery) //Exception thrown at runtime
{
    double testval = ttu.propertyB;
} 

, я получаю исключение, которое генерируется этой функцией ApplicationException. Разве это не должно исключение будет выдано, когда эта функция вызывается где-либо еще, за исключением запроса L2E?

Что я делаю не так? Как я могу вызвать функцию оракула из Linq-To-Entities? Обратите внимание, что функция, которую я пытаюсь вызвать, не является встроенной функцией оракула, а является определяемой пользователем функцией.

5
задан Community 23 May 2017 в 12:07
поделиться