EntityException, вызвавший выполнение запроса EF6 с помощью .Includes ()

c# entity-framework entity-framework-6

Вопрос

У меня возникла проблема с переносом решения EF4 на EF6.

Мы используем шаблоны T4 для создания постоянных неосведомленных POCO, которые имеют свойства навигации на основе ObservableCollection <T>.

Поскольку наша реализация ObjectContext предоставляет сущности в качестве объектов IObjectSet <entity>, мы теряем метод Object Include () из ObjectQuery и поэтому должны использовать метод расширения для IQueryable для его восстановления следующим образом:

public static IQueryable<TSource> Include<TSource>(this IQueryable<TSource> source, string path)
{
    IQueryable<TSource> returnValue = source;
    var objectQuery = source as ObjectQuery<TSource>;

    if (objectQuery != null)
    {
        returnValue = objectQuery.Include(path);
    }

    return returnValue;
}

Обновив решение для использования EF6, теперь мы видим следующее исключение System.Data.Entity.Core.EntityException при выполнении запросов с использованием .Include (): -

«Свойство навигации« Сведения »для объекта типа« DataEntities.Parent »должно реализовать ICollection <T>, чтобы Entity Framework могла отслеживать изменения в коллекциях».

То, что я не получаю, - это свойство «Сведения» - это настраиваемый тип, который наследует ObservableCollection <T>, который является ICollection <T>, поэтому почему оно указывает, что оно должно реализовать ICollection <T>?

Если у кого-то есть свет, чтобы пролить это, я был бы благодарен, спасибо.

Популярные ответы

Как поясняется в этом блоге, член команды EF

Правила, которые должны выполнять ваши классы для включения прокси-серверов с отслеживанием изменений, являются довольно строгими и ограничительными. Это ограничивает возможности определения ваших объектов и предотвращает использование таких вещей, как частные свойства или даже частные сеттеры.

Правила:

  • Класс должен быть общедоступным, а не запечатанным.
  • Все объекты должны иметь общедоступные / защищенные виртуальные геттеры и сеттеры.
  • Свойства навигационной коллекции должны быть объявлены как ICollection. Они не могут быть IList, List, HashSet и т. Д.

И этот ответ объясняет, почему вы не можете использовать свою реализацию.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему