在 EF 中结合延迟加载和急切加载
Combining lazy and eager loading in EF
我想知道是否可以将延迟加载和预先加载结合起来。
例如,我有一个带有 GET 方法的 Web Api 控制器,不需要加载相关实体数据,但我还有另一个 Web Api 控制器,其 GET 方法需要从相关实体检索数据。
将这两种方法结合起来是否是一种好的做法,我是否需要设置任何特定的配置?
是的,你可以that.And根据像你这样的实际情况,这也是一个很好的做法。
当您不需要 Lazyloding
时,您可以在该特定方法上禁用它,如下所示。
public List<PropertyListDto> SearchProperties(AdditionalSearchInput input)
{
_context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading
///your code
}
注意:在 Entity Framework 4 及更高版本中 默认启用延迟加载。我们可以 disable
全局 DbContext
级别,或者有选择地 query level
级别,如上所示。
这是 DbContext
级别的操作方法。
public partial class MyDBEntities : DbContext
{
public MyDBEntities(): base("name=MyDBEntities")
{
this.Configuration.LazyLoadingEnabled = false;
}
}
更新: 你 不需要 lazyloding 的 50 个控制器 你可以在 constractor
级别禁用它,如图所示below.Then 你 不需要 在 query level
上给每个 method.I 认为这是实现它的非常快速的方法:)
public class YourAppService : IYourAppService
{
private readonly YourDbContext _context;
public YourAppService(YourDbContext context)
{
_context = context;
_context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading
}
}
我想知道是否可以将延迟加载和预先加载结合起来。 例如,我有一个带有 GET 方法的 Web Api 控制器,不需要加载相关实体数据,但我还有另一个 Web Api 控制器,其 GET 方法需要从相关实体检索数据。
将这两种方法结合起来是否是一种好的做法,我是否需要设置任何特定的配置?
是的,你可以that.And根据像你这样的实际情况,这也是一个很好的做法。
当您不需要 Lazyloding
时,您可以在该特定方法上禁用它,如下所示。
public List<PropertyListDto> SearchProperties(AdditionalSearchInput input)
{
_context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading
///your code
}
注意:在 Entity Framework 4 及更高版本中 默认启用延迟加载。我们可以 disable
全局 DbContext
级别,或者有选择地 query level
级别,如上所示。
这是 DbContext
级别的操作方法。
public partial class MyDBEntities : DbContext
{
public MyDBEntities(): base("name=MyDBEntities")
{
this.Configuration.LazyLoadingEnabled = false;
}
}
更新: 你 不需要 lazyloding 的 50 个控制器 你可以在 constractor
级别禁用它,如图所示below.Then 你 不需要 在 query level
上给每个 method.I 认为这是实现它的非常快速的方法:)
public class YourAppService : IYourAppService
{
private readonly YourDbContext _context;
public YourAppService(YourDbContext context)
{
_context = context;
_context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading
}
}