2014-10-09 3 views
0

У меня есть эта модель структура:Entity Framework 6 и явная загрузка графы объектов

public class Blog 
{ 
    public ICollection<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public ICollection<Comment> Comments { get; set; } 
} 

public class Comment 
{ 

} 

Я хотел бы явно загрузить «Сообщения» и «Комментарии» коллекцию.

Я не может использовать отложенной загрузки, ни жадной загрузки (с помощью оператора Include), потому что мои загруженные коллекции должны быть отфильтрованы, прежде чем загружать в каждый объект (так как они могут содержать огромное количество элементов).

Любые советы по наилучшему способу достижения этого?

Спасибо!

Риана

ответ

0

Я нашел решение, которое вдохновило и основанный на this Rowan Miller's presentation at TechEd 2014.

Моя основная забота заключалась в том, чтобы отфильтровывать коллекции «Сообщения» и «Комментарии» (в соответствии с известными условиями) при загрузке агрегата блога.

Ленивая загрузка не была хорошим решением, поскольку он будет посылать слишком много запросов к базе данных для того, чтобы загрузить все необходимые сообщения и соответствующие комментарии (сообщения и комментарии коллекции могут быть огромными)

Я думал, жадную загрузку, использование оператора «Include» не было хорошим решением, потому что оператор «Include» не поддерживает фильтр. Это означает, что если я загружу свои блоги следующим образом: myContext.Blogs.Include («Posts»), коллекция сообщений не фильтруется, и все сообщения из базы данных будут загружены, я не хочу этого.

В EF6 теперь можно перехватывать и изменять запросы до того, как он будет переустроен SQL и отправлен в базу данных. Эта функция является ключевым решением.

Мое решение состоит в том, чтобы перехватить все запросы SELECT объектов Post и Comment и изменить их для применения моих фильтров. С этой реализацией я могу выполнить загрузку, и все запросы SELECT объекта Post и Comment имеют фильтры, которые применяются автоматически.

Rowan Miller продемонстрировал эту функцию, реализовав мягкое удаление.

Надеется, что это поможет,

Риана

Смежные вопросы