Entity Framework Core получить сущность без связанных сущностей

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

Функция идет следующим образом return context.Entity.SingleOrDefault(n => n.Name == name) где context is a DbContext,

На данный момент ответ содержит только одну сущность, но с добавленными 50 "дочерними" сущностями, которые мне не нужны.

Каков наилучший способ получить единую сущность из БД?

С помощью EFC2.1 pre release build

Редактировать:

Также обнаружил, что если вы используете DbContext.Entity.AsNoTracking Вы можете получить сущность без дочерних коллекций.

Не уверен, что полная сущность будет сохранена после внесения изменений и вызова DbContext.saveChanges()

2 ответа

Решение

Вы должны включить отложенную загрузку, просто добавьте свойство в свой класс, как это.

public virtual ICollection<ChildType> NavigationProperty;

Вот очень полезный документ для загрузки связанных данных.

Я недавно обнаружил, что вы также можете использовать DbContext.Entity.AsNoTracking() для этого.

Использование запроса linq при получении объекта приведет к тому, что все связанные объекты, содержащиеся в linq, также будут выбраны.

Скажи у тебя a Teacher, a Student and a Classroom entity, Учитель может иметь несколько учеников и классных комнат. Вы хотите найти всех учителей с классом А и всех учеников мужского пола, чтобы вы делали

DbContext.Teachers.Where(x => x.Classroom.Name = "A" && x.Student.Gender = "Male")

Это принесет Teacher entities со всеми основными Classrooms а также Students так как вы вызвали их в выражении linq. Поскольку вам нужна только сущность Учитель, вы должны использовать следующее:

DbContext.Teachers.AsNoTracking().Where(x => x.Classroom.Name = "A" && x.Student.Gender = "Male")

С помощью AsNoTracking() вы заявляете, что вам не нужны базовые данные, и вам просто нужно их отфильтровать по сущности, которую вы хотите.

Другие вопросы по тегам