EntityCommandCompilationException с методом Include

У меня есть 4 таблицы в моей базе данных:

Таблица1
idTable1

Таблица2
idTable2
#idTable1

Таблица3
idTable3
#idTable2

Таблица4
idTable4
#idTable2

Когда я использую следующую инструкцию, у меня возникает EntityCommandCompilationException :

dbcontext.table1.Include("table2.table3").Include("table2.table4").Where(x => x.idTable1 == 1).FirstOrDefault();

Использование лямбда-выражений дает тот же результат:

dbcontext.table1.Include(x => x.table2.Select(y => y.table3)).Include(x => x.table2.Select(y => y.table4)).Where(x => x.idTable1 == 1).FirstOrDefault();

Я пробовал только с «Включить («table2.table3»)», а затем только с «Включить («table2.table4»)», и он отлично работает.

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

С Уважением

Редактировать :

Сообщение об исключении: «Произошла ошибка при подготовке определения команды. Подробнее см. во внутреннем исключении».

InnerException: «указанный метод не поддерживается», а иногда просто «нуль».

Трассировки стека :

   at System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree)
   at System.Data.EntityClient.EntityProviderServices.CreateCommandDefinition(DbProviderFactory storeProviderFactory, DbCommandTree commandTree)
   at System.Data.EntityClient.EntityProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
   at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)
   at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Prepare(ObjectContext context, DbQueryCommandTree tree, Type elementType, MergeOption mergeOption, Span span, ReadOnlyCollection`1 compiledQueryParameters, AliasGenerator aliasGenerator)
   at System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1 sequence)
   at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
   at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
   at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
   at MyProjectServer_BLL.Implementation_EF.Table1_EF._getTable1(Int32 idTable1) dans c:\MyProject\MyProjectServer_BLL\Implementation_EF\Table1_EF.cs:ligne 43
   at MyProjectServer_BLL.Base.Table1_Base.getTable1(Int32 idTable1) dans c:\MyProject\MyProjectServer_BLL\Base\Table1_Base.cs:ligne 45
   at MyProject_ConsoleServer.Program.Main(String[] args) dans c:\MyProject\MyProject_ConsoleServer\Program.cs:ligne 62
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

person Alex R.    schedule 26.04.2013    source источник
comment
Что такое сообщение об исключении (и трассировка стека)?   -  person Pawel    schedule 28.04.2013
comment
Я обновил свой первый пост. Спасибо за ваш интерес.   -  person Alex R.    schedule 29.04.2013


Ответы (1)


Не нужно указывать Include в таблице1.

но когда вы будете работать с другой таблицей, тогда она нужна. Например

dbcontext.table2.Include("table1").Where(x => x.idTable2 == 1).FirstOrDefault();

на самом деле Include необходимо в отношениях один ко многим.

person Atish Dipongkor    schedule 29.04.2013
comment
Мой запрос к таблице 1 включает только таблицу 2.table3 и таблицу 2.table4, а не таблицу 1. - person Alex R.; 29.04.2013
comment
в table2.table3 есть две таблицы или это одна таблица? - person Atish Dipongkor; 29.04.2013