结合EF中的懒惰和急切加载

时间:2016-08-31 09:41:32

标签: entity-framework asp.net-web-api2 lazy-loading eager-loading

我想知道是否可以组合懒惰和急切加载。 例如,我有一个带有GET方法的Web Api控制器,不需要加载相关的实体数据,但我还有另一个Web Api控制器及其GET需要从相关实体检索数据的方法。

将这两种方法结合起来是否是一种好的做法,是否需要设置任何特定的配置?

1 个答案:

答案 0 :(得分:2)

是的,你可以做到这一点。根据你的实际情况,这也是一个很好的做法。

当您不需要 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; } } 级别的操作方法。

constractor

更新不需要lazyloding 的50个控制器你可以在query level级别禁用它,如下所示。然后你不需要在每个方法上public class YourAppService : IYourAppService { private readonly YourDbContext _context; public YourAppService(YourDbContext context) { _context = context; _context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading } } 提供。我认为这是实现它的非常快捷的方法:)

Embeddable