0

Можно ли с нетерпением загружать связанные объекты, но не иметь загруженных связанных объектов связанных объектов?Entity Framework - Неглубокая загрузка?

В моем случае, у меня есть набор флагов, чтобы определить, какие связанные объекты должны быть загружены:

[Flags] 
public enum FooRetrievalOptions 
{ 
    None = 0, 
    Bar = 1, 
    Baz = 2, 
    All = Bar | Baz 
} 

Я создаю IQueryable <Foo> и последовательно .INCLUDE в зависимости от того, какие флаги были установлены.

IQueryable<Foo> query = context.Foos; 

if (fooRetrievalOptions.HasFlag(FooRetrievalOptions.Bar)) 
{ 
    query.Include(f => f.Bar); 
} 

if (fooRetrievalOptions.HasFlag(FooRetrievalOptions.Baz)) 
{ 
    query.Include(f => f.Baz); 
} 

List<Foo> foos = query.ToList(); 

Проблема с этим в том, что при серийном оформлении он может создавать циклы в зависимости от свойств навигации на барах и базах.

Я просто хочу загрузить связанные объекты в одной базе данных без их собственных связанных объектов, которые также загружаются. Это возможно?

+0

Что библиотекой вы используете сериализовать ваши объекты? – Maxime

+0

DataContractSerializer. Я мог бы использовать IsReference = true для обработки циклов, но похоже, что это приведет к довольно большому XML. – bbush

+0

Lazy loading в контексте отключен. Вот почему я указываю, какие связанные объекты загружаются с нетерпением. – bbush

ответ

0

Создайте объект передачи данных (DTO) и скопируйте нужные вам значения, прежде чем передавать их для сериализации. Обычно это делается при разработке API-интерфейсов, которые помогают справляться с циклическими ссылками EF и возвращать только то, что нужно потребителю.

редактирования: Что касается, казалось бы, утомительным ручным отображение всех атрибутов, есть решения, которые помогут с этим, такими как Automapper: http://automapper.org/

+0

Это будет работать, но это неудобно громоздко, так как количество шкал свойств навигации. – bbush

+0

Я в конечном итоге взял этот маршрут. Спасибо. – bbush

+0

В будущем вы также можете использовать какой-то картограф, это может сэкономить вам немного хлопот; добавила эту заметку в ответ. –

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