Найти имя объектов, на которые есть ссылки в IQueryable и IEnumerable в ENtity Framework - PullRequest
0 голосов
/ 18 ноября 2011

Я создаю обобщенную функцию, у которой определение функции имеет вид:

  public static List<T> Func_IEnumerable<T>(this IEnumerable<T> q, ObjectContext dc, string CacheId)

и одна функция как

  public static List<T> Func_IQueryable<T>(this IQueryable<T> q, ObjectContext dc, string CacheId)

Вопрос в том, что я хочу узнать имя таблицы, имя процедуры, имя функции и / или имя представления, на которое есть ссылка в запросе Ienumerable или IQueryable

Возможно ли это с каркасом Linq

А если нет, то мы можем преобразовать IEnumerable в System.Data.Objects.ObjectQuery и, наконец, использовать ToTraceString для получения чистого SQL.

Теперь из Pure Sql мы можем получить имена объектов.

Если у Sql Server есть какие-то функции, чтобы делать то же самое, если нет, то как мне его проанализировать, чтобы получить желаемые результаты.

Спасибо

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 ноября 2011

Если вы хотите использовать SqlCacheDependency (featrue сильно зависит от SQL), почему вы используете EF (функция, которая пытается скрыть SQL как можно больше), в первую очередь? Вы объединяете две функции, которые не предназначены для совместной работы - это часто случается в .NET Framework.

IQueryable можно преобразовать в ObjectQuery, только если объект ObjectQuery = он был создан как запрос к незащищенному ObejctSet, и вы никогда не вызывали ToList, AsEnumerable или другой исполняемый метод для него , Это также означает, что вызов хранимой процедуры не может быть преобразован в ObjectQuery.

Действительный IEnumerable (выполненный запрос) не может быть преобразован в ObjectQuery, и вы не можете получить какую-либо информацию об источнике набора результатов из IEnumerable. Это относится ко всем запросам, для которых был вызван ToList или AsEnumerable, и, например, ко всем вызовам сопоставленных хранимых процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...