实体框架 - 在第二级导航属性中包含多个集合属性抛出EntityCommandExecutionException

时间:2016-09-02 08:17:57

标签: c# mysql entity-framework include eager-loading

我将MySql 6.9.9与EF 6结合使用。我知道如果我想要包含多个导航属性,我只需添加另一个包含,它可以正常工作。

例如(作品):

return _repositoryManager.GetRepository<KundenRepository>().GetSingle(x => x.Id == kundeId,
 x => x.KundenSachbearbeiter,
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter),
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter).Select(dest => dest.KontakteAddressen),
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter).Select(dest => dest.AbteilungListe),
 x => x.Zuordnungen.Select(dest => dest.KontakteAddressen.Laender));

现在我的情况是我想要将一个集合包含在Zuordnungen中 - &gt; KontakteAddressen(作品):

return _repositoryManager.GetRepository<KundenRepository>().GetSingle(x => x.Id == kundeId,
 x => x.KundenSachbearbeiter,
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter),
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter).Select(dest => dest.KontakteAddressen),
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter).Select(dest => dest.AbteilungListe),
 x => x.Zuordnungen.Select(dest => dest.KontakteAddressen.Laender),
 x => x.Zuordnungen.Select(dest => dest.KontakteAddressen).Select(dest => dest.KontakteBemerkungen));

现在如果我想在Zuordnungen中加入另一个集合 - &gt; KontakteAddressen崩溃了:

return _repositoryManager.GetRepository<KundenRepository>().GetSingle(x => x.Id == kundeId,
 x => x.KundenSachbearbeiter,
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter),
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter).Select(dest => dest.KontakteAddressen),
 x => x.KundenSachbearbeiter.Select(dest => dest.Mitarbeiter).Select(dest => dest.AbteilungListe),
 x => x.Zuordnungen.Select(dest => dest.KontakteAddressen.Laender),
 x => x.Zuordnungen.Select(dest => dest.KontakteAddressen).Select(dest => dest.KontakteBemerkungen),
 x => x.Zuordnungen.Select(dest => dest.KontakteAddressen).Select(dest => dest.KontakteKommunikation));

其他信息:

这是我的GetSingle方法(我使用存储库模式):

 public virtual TDto GetSingle(Expression<Func<TEntity, bool>> where,
         params Expression<Func<TEntity, object>>[] navigationProperties)
    {
        TDto result;

        using (var context = new Entities(_connectionStringName))
        {
            IQueryable<TEntity> query = context.Set<TEntity>();

            query = navigationProperties.Aggregate(query, (current, navigationProperty) => current.Include(navigationProperty));

            var item = query.AsNoTracking().Where(where).SingleOrDefault(); // Exception happens here

            result = _mapper.Map<TDto>(item);
        }

        return result;
    }

我的实体模型: Entitymodel

我的数据模型: Datamodel

我收到System.Data.Entity.Core.EntityCommandExecutionException

的InnerException: {&#34;未知列&#39; Extent6.Id&#39;在&#39; on&#39;&#34;}

详细说明:

  

System.Data.Entity.Core.EntityCommandExecutionException ist aufgetreten。     的HResult = -2146232004     Message =执行命令定义时发生错误。有关详细信息,请参阅内部异常     来源=的EntityFramework     堆栈跟踪:          在System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)          at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType](ObjectContext context,ObjectParameterCollection parameterValues)          at System.Data.Entity.Core.Objects.ObjectQuery 1.<>c__DisplayClass7.<GetResults>b__6() at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func 1 func,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction,Boolean releaseConnectionOnSuccess)          在System.Data.Entity.Core.Objects.ObjectQuery 1.<>c__DisplayClass7.<GetResults>b__5() at System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func 1操作)          在System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption)          在System.Data.Entity.Core.Objects.ObjectQuery 1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() at System.Data.Entity.Internal.LazyEnumerator 1.MoveNext()          在System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable 1 source) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2[TResult](IEnumerable 1序列)          at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle [TResult](IEnumerable 1 query, Expression queryRoot) at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable 1 source)          在SuR.Runtime.Data.EntityFramework.DataAccess.GenericDataRepository 2.GetSingle(Expression 1其中,表达式1[] navigationProperties) in C:\Users\Daniel\Source\Repos\SurFramework.git\SuR.Runtime.Data\EntityFramework\DataAccess\GenericRepository.cs:line 84 InnerException: Code=0 ErrorCode=-2147467259 HResult=-2147467259 Message=Unknown column 'Extent6.Id' in 'on clause' Number=1054 Source=MySql.Data StackTrace: at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId) at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext 1 c)               在System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func 3操作,TInterceptionContext interceptionContext,Action 3 executing, Action 3执行)               在System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand命令,DbCommandInterceptionContext interceptionContext)               在System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)               在System.Data.Common.DbCommand.ExecuteReader(CommandBehavior行为)               在System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)          InnerException:

修改

我在MSSQL数据库上创建了相同的场景(也改变了app.config中的提供程序)并且它运行正常,所以我猜它可能是MySql提供程序中的一个错误?

0 个答案:

没有答案