Entity framework EF代码第一个问题-未加载相关实体
这真烦人 我有这样的想法:Entity framework EF代码第一个问题-未加载相关实体,entity-framework,Entity Framework,这真烦人 我有这样的想法: class Person { ..properties id, name etc.. } class Task { ..properties id, name etc.. Person Moderator {get;set} } public class DataModel : DbContext { public DbSet<Task> Tasks { get; set; } public DbSet&l
class Person {
..properties id, name etc..
}
class Task {
..properties id, name etc..
Person Moderator {get;set}
}
public class DataModel : DbContext {
public DbSet<Task> Tasks { get; set; }
public DbSet<Person> People { get; set; }
}
Task t = db.Tasks.Include(x => x.Moderator).SingleOrDefault(p => p.Id == 22)
我要怎么做才能把整个对象图买回来?我必须加入SingleorDefault调用吗?似乎有点不对劲
我说过这真的很烦人
TIA,您的
版主属性禁用了延迟加载功能,因此只有使用Load()
显式加载时才会加载该属性
您可以使用查询中的方法强制EF急切地加载相关的人员实体,如下所示:
class Person {
..properties id, name etc..
}
class Task {
..properties id, name etc..
Person Moderator {get;set}
}
public class DataModel : DbContext {
public DbSet<Task> Tasks { get; set; }
public DbSet<Person> People { get; set; }
}
Task t = db.Tasks.Include(x => x.Moderator).SingleOrDefault(p => p.Id == 22)
在中有一个非常好的概述。您已经关闭了版主属性的延迟加载功能,因此只有使用加载()
显式加载时才会加载该属性
您可以使用查询中的方法强制EF急切地加载相关的人员实体,如下所示:
class Person {
..properties id, name etc..
}
class Task {
..properties id, name etc..
Person Moderator {get;set}
}
public class DataModel : DbContext {
public DbSet<Task> Tasks { get; set; }
public DbSet<Person> People { get; set; }
}
Task t = db.Tasks.Include(x => x.Moderator).SingleOrDefault(p => p.Id == 22)
中有一个非常好的概述。两个选项供您选择。默认情况下,code first/dbContext模型返回从您的模型派生的代理对象(当您遇到JSON序列化问题时,了解这一点很重要)。代理对象使用延迟加载关联,但仅在某些情况下使用。主持人属性必须声明为虚拟,以便代理可以覆盖它并为您执行延迟加载
但是,延迟加载可能会产生一个称为的问题。如果在大多数情况下,你只需要任务,而不需要主持人,这不会是一个问题。但是,如果您经常显示任务及其相关主持人的列表,则除了原始列表的1外,您还必须为该列表中的每个任务运行额外的数据库往返(例如,对于100个任务的列表,您将执行101次查询以显示任务及其主持人)
为了避免这种情况,这将强制关系加载。这样使用它
Task t=db.Tasks.Include(t=>t.mediator).SingleOrDefault(p=>p.Id==
22);
希望这对您有所帮助。有两种选择。默认情况下,code first/dbContext模型返回从您的模型派生的代理对象(当您遇到JSON序列化问题时,了解这一点很重要)。代理对象使用延迟加载关联,但仅在某些情况下使用。主持人属性必须声明为虚拟,以便代理可以覆盖它并为您执行延迟加载
但是,延迟加载可能会产生一个称为的问题。如果在大多数情况下,你只需要任务,而不需要主持人,这不会是一个问题。但是,如果您经常显示任务及其相关主持人的列表,则除了原始列表的1外,您还必须为该列表中的每个任务运行额外的数据库往返(例如,对于100个任务的列表,您将执行101次查询以显示任务及其主持人)
为了避免这种情况,这将强制关系加载。这样使用它
Task t=db.Tasks.Include(t=>t.mediator).SingleOrDefault(p=>p.Id==
22);
希望这有帮助