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()
вы заявляете, что вам не нужны базовые данные, и вам просто нужно их отфильтровать по сущности, которую вы хотите.