我将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.ObjectQuery1.<>c__DisplayClass7.<GetResults>b__5() at System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func
1操作) 在System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable
1 forMergeOption) 在System.Data.Entity.Core.Objects.ObjectQuery1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() at System.Data.Entity.Internal.LazyEnumerator
1.MoveNext() 在System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable1 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](IEnumerable1 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.GenericDataRepository2.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.InternalDispatcher1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func
3操作,TInterceptionContext interceptionContext,Action3 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提供程序中的一个错误?