实体框架多对多,渴望加载

时间:2011-10-10 12:19:07

标签: entity-framework entity-framework-4.1

我正在使用带有MySql的Entity Framework 4.1,并且遇到了多对多关系的急切加载问题。受影响的表的简化版本如下所示:

CabinCategory - CabinCategoryId
CabinGrade - CabinGradeId, CabinCategoryId
Deck - DeckId
DeckCabinGrades - DeckId, CabinGradeId <--- Join table

我最终试图访问CabinCategory.CabinGrade.Deck

我想我已成功使用

成功映射
        modelBuilder.Entity<CabinGrade>()
            .HasMany(c => c.Decks)
            .WithMany(d => d.CabinGrades)
            .Map(m =>
                {
                    m.MapLeftKey("CabinGradeId");
                    m.MapRightKey("DeckId");
                    m.ToTable("DeckCabinGrades");
                }
            );

如果我渴望加载CabinGrades但让Decks懒得加载一切都很棒。但是,如果我试图用

来加载CabinGrades和Decks
this.Context.CabinCategories.Include("CabinGrades").Include("CabinGrades.Decks").ToList();

我得到一个空引用异常和下面的堆栈跟踪

[NullReferenceException: Object reference not set to an instance of an object.]
System.Data.Objects.DataClasses.RelatedEnd.GetOtherEndOfRelationship(IEntityWrapper wrappedEntity) +57
System.Data.Objects.ObjectStateManager.AddEntityToCollectionOrReference(MergeOption mergeOption, IEntityWrapper wrappedSource, AssociationEndMember sourceMember, IEntityWrapper wrappedTarget, AssociationEndMember targetMember, Boolean setIsLoaded, Boolean relationshipAlreadyExists, Boolean inKeyEntryPromotion) +683
System.Data.Objects.ObjectStateManager.UpdateRelationships(ObjectContext context, MergeOption mergeOption, AssociationSet associationSet, AssociationEndMember sourceMember, EntityKey sourceKey, IEntityWrapper wrappedSource, AssociationEndMember targetMember, IList targets, Boolean setIsLoaded) +797
System.Data.Common.Internal.Materialization.Shaper.FullSpanAction(IEntityWrapper wrappedSource, IList`1 spannedEntities, AssociationEndMember targetMember) +367
System.Data.Common.Internal.Materialization.<>c__DisplayClass2`2.<HandleFullSpanCollection>b__0(Shaper state, List`1 spannedEntities) +38
System.Data.Common.Internal.Materialization.Coordinator`1.ResetCollection(Shaper shaper) +193
System.Data.Common.Internal.Materialization.RowNestedResultEnumerator.MoveNext() +251
System.Data.Common.Internal.Materialization.ObjectQueryNestedEnumerator.TryReadToNextElement() +31
System.Data.Common.Internal.Materialization.ObjectQueryNestedEnumerator.ReadElement() +40
System.Data.Common.Internal.Materialization.ObjectQueryNestedEnumerator.MoveNext() +51
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +471
System.Linq.Enumerable.ToList(IEnumerable`1 source) +79

当我查看MySql查询日志时,它实际上生成了一个工作正常并获得Decks的查询。就好像它无法将结果转换回对象。

我是否要求EF eager loading的大部分内容还是应该这样做?它可能是MySql连接器问题吗?

编辑:只有一个'级别'深度才能正常工作(CabinGrade.Decks)。这个问题似乎发生在它的两个“级别”深处(CabinCategory.CabinGrade.Decks)

1 个答案:

答案 0 :(得分:3)

所以这似乎是MySql .NET Connector 6.4.4的错误(见评论)

已使用MySql

记录
相关问题