在 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
        }
}