实体框架核心获取没有相关实体的实体

时间:2018-04-16 15:00:52

标签: c# entity-framework-core dbcontext

我已经对此进行了一些搜索,但到目前为止还没有找到合适的解决方案。我试图从我的数据库中获取一个实体而没有附加相关实体。

该功能如下return context.Entity.SingleOrDefault(n => n.Name == name) context is a DbContext

截至目前,该回复仅包含一个实体,但添加了50个"孩子"我不需要的实体。

从db获取单个实体的最佳方法是什么?

使用EFC2.1 pre release build

编辑:

还发现如果使用DbContext.Entity.AsNoTracking,您可以获得没有子集合的实体。

在进行更改并致电DbContext.saveChanges()

后,不确定是否会保存完整实体

2 个答案:

答案 0 :(得分:4)

您必须启用延迟加载,只需像这样向您的类添加属性。

public virtual ICollection<ChildType> NavigationProperty;

这是Loading Related Data的一个非常有用的文档。

答案 1 :(得分:0)

我最近发现您也可以为此使用DbContext.Entity.AsNoTracking()

在获取实体时使用linq查询将导致linq中包含的所有相关实体也被获取。

说您有a Teacher, a Student and a Classroom entity。一位老师可以有多个学生和教室。您想找到所有教室A的老师和所有男学生,所以您会这样做

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

自从您在linq表达式中调用Teacher entities和所有基础ClassroomsStudents以来,这将获取DbContext.Teachers.AsNoTracking().Where(x => x.Classroom.Name = "A" && x.Student.Gender = "Male") 。 由于只需要教师实体,因此应使用以下内容:

AsNoTracking()

使用dataStr.split('.').takeRight(2).mkString(".") 声明您不想要基础数据,而只需要通过所需的实体进行过滤即可。