Я использую Code First в EF. Скажем, у меня есть две сущности:Фильтрация навигационных свойств в EF Code First
public class Farm
{
....
public virtual ICollection<Fruit> Fruits {get; set;}
}
public class Fruit
{
...
}
Мои DbContext что-то вроде этого:
public class MyDbContext : DbSet
{
....
private DbSet<Farm> FarmSet{get; set;}
public IQueryable<Farm> Farms
{
get
{
return (from farm in FarmSet where farm.owner == myowner select farm);
}
}
}
Я делаю это так, что каждый пользователь может видеть только свои фермы, и я не должен называть Где по каждому запросу в db.
Теперь я хочу, чтобы фильтровать все фрукты из одной фермы, я попробовал это (в классе Farm):
from fruit in Fruits where fruit .... select fruit
но запрос генерируется не включает в себя положение, где, что очень важно, потому что У меня есть десятки тысяч строк и неэффективно загружать их все и фильтровать, когда они являются объектами.
Я читал, что ленивые загруженные свойства заполняются в первый раз они обращались, но они читают ВСЕ данные, никакие фильтры не могут быть применены, если вы делаете что-то вроде этого:
from fruits in db.Fruits where fruit .... select fruit
Но я не могу сделайте это, потому что Farm не знает DbContext (я не думаю, что это должно (?)), но и для меня он просто теряет всю цель использования свойств навигации, если мне нужно работать со всеми данными, а не с одним что принадлежит моей ферме.
Так,
- я делаю что-то неправильно/что делает неправильные предположения?
- Есть ли способ применить фильтр к свойству навигации, которое генерируется для реального запроса? (Я работаю с большим количеством данных)
Благодарим за понимание!
Спасибо Джереми, я решил следовать вашему совету и оставить обязанности фильтрации/обработки в моем контексте класса , Это имеет смысл, потому что мне нужна только фильтрация для одного из моих сущностей, но это было бы громоздко, если бы мне было нужно это для нескольких объектов, не так ли? Контекст будет заполнен методами запросов и заполнения объектов. Я не думаю, что это нарушает принцип единой ответственности, но это звучит довольно странно, не так ли? – edpaez