我已经对此进行了一些搜索,但到目前为止还没有找到合适的解决方案。我试图从我的数据库中获取一个实体而没有附加相关实体。
该功能如下return context.Entity.SingleOrDefault(n => n.Name == name)
context is a DbContext
。
截至目前,该回复仅包含一个实体,但添加了50个"孩子"我不需要的实体。
从db获取单个实体的最佳方法是什么?
使用EFC2.1 pre release build
还发现如果使用DbContext.Entity.AsNoTracking
,您可以获得没有子集合的实体。
在进行更改并致电DbContext.saveChanges()
答案 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
和所有基础Classrooms
和Students
以来,这将获取DbContext.Teachers.AsNoTracking().Where(x => x.Classroom.Name = "A" && x.Student.Gender = "Male")
。
由于只需要教师实体,因此应使用以下内容:
AsNoTracking()
使用dataStr.split('.').takeRight(2).mkString(".")
声明您不想要基础数据,而只需要通过所需的实体进行过滤即可。