2013-08-10 2 views
1

Я новичок в Entity Framework, я использовал Linq-to-SQL, и он отлично работает, но когда я хочу создать службу данных WCF, я получаю много ошибок от службы, поэтому я решил перейти на EF.Выполнение функции, связанной с таблицей, как IQueryable в платформе Entity

Но моя проблема - TVF (функция, связанная с таблицей), в моей базе данных у меня много TVF, которые возвращают данные для каждого зарегистрированного пользователя, а также права пользователя указанного объекта, например, у меня есть таблица Records и TVF uf_SelectUserRecords(@UID BIGINT). Я хочу выполнить эту функцию и вернуть ее результат вместо таблицы Records.

В Linq-to-SQL он работал нормально, но в EF я не могу заставить его работать, проблема в том, что я добавляю TVF к модели (через некоторые трюки, так как EF-конструктор ее не поддерживает) от TVF не IQueryable, а IEnumerable, поэтому я не могу вернуть его в службе данных WCF.

Есть ли способ, которым я могу выполнять функцию в виде таблицы?

+0

Какую версию EF вы используете? Похоже, [улучшенная поддержка TVF] (http://msdn.microsoft.com/en-us/hh859577) существует в EF 5. –

+0

Я использую EF5 в VS2012 – BigBoss

ответ

1

Каждый, где я вижу, что EF 5 имеют поддержку ТВФ, но в моем проекте я не вижу никакой поддержки для этого. Зачем? Я использовал .NET 4, а новые функции EF 5 доступны только для .NET 4.5

1

Вы можете конвертировать результат в IQueryable с помощью AsQueryable():

IEnumerable<Record> result = {call TVF}; 
IQueryable<Record> query = result.AsQueryable(); 
return query; 
+1

, который будет выполнять запросы к базе данных или к объекты в памяти? Будет ли весь перечислимый быть загружен в память из базы данных, а затем на нем будут выполняться запросы? –

+0

Это зависит от типа базового типа. Если он уже реализует 'IQueryable', тогда он должен. Я никогда не пробовал, поэтому не могу сказать наверняка. –

Смежные вопросы