Entity Framework Многие ко многим и нетерпеливо загружаются - PullRequest
3 голосов
/ 10 октября 2011

Я использую Entity Framework 4.1 с MySql и испытываю проблемы со стремительной загрузкой отношений «многие ко многим».Упрощенная версия затронутых таблиц выглядит следующим образом:

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, этофактически сгенерировал запрос, который отлично работает и получает колоды.Как будто он не может преобразовать результаты обратно в объекты.

Я прошу большую часть EF с нетерпением загружать или это должно сработать?Может ли это быть проблема с коннектором MySql?

EDIT : Он отлично работает, если его глубина составляет всего один уровень (CabinGrade.Decks).Кажется, проблема возникает, когда она имеет два «уровня» глубины (CabinCategory.CabinGrade.Decks)

1 Ответ

3 голосов
/ 11 октября 2011

Похоже, что это ошибка MySql .NET Cconnector 6.4.4 (см. Комментарии)

Это было зарегистрировано с MySql

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