Как мне выполнить многоуровневую активную загрузку в Entity Framework 4.3, когда у меня есть полиморфная коллекция? - PullRequest
3 голосов
/ 06 марта 2012

У меня есть следующие классы:

public class Parent 
{
  public ICollection<Child> Children {get;set;}
}

public class Child
{      
}

public class Boy : Child
{  
  public Toy Toy {get;set;}    
}

public class Girl : Child
{      
  public Book Book {get;set;}
}

Я хочу загрузить родителей со всеми мальчиками с нетерпением:

Parents.Include(p => p.Children.OfType<Boys>().Select(b => b.Toy));

Выше не работает, и я получаю сообщение об ошибке, чтопуть неверен.

Как мне это сделать?

1 Ответ

1 голос
/ 06 марта 2012

Я думаю, что в этом случае метод расширения Include разрешается в строку "Boys", которая, очевидно, не может быть включена методом-членом Include.

Даже если это будет выполнено, яподозреваю, что было бы проблемой иметь Children коллекций, которые заполнены только Boy объектами.Для меня это будет неопределенное состояние коллекции, потому что оно представляет потомков родителя.Поэтому он либо должен содержать все дочерние элементы, либо все же быть пустым.

Если вам часто требуется коллекция Boys (или реальная подвеска к ней) и ее ссылки (Toy), вы должны отобразить ее как отдельную навигациюимущество.В противном случае сделайте OfType() в коллекции Children.

...