EFCore 使用额外说明

EFCore使用过程中镜像查询,lazyloading,上下文资源池等记录

     1.efcore使用过程中的查询,一般都会直接去库镜像中查找,要避免镜像查询数据,在查询中可以使用AsNoTracking(),让查询直          接从数据库查询避免镜像查询,例如DbContext.Product.AsNoTracking().ToListAsync().

     2.efcore使用过程中,如果缓存镜像已缓存了数据,可以使用FindAsync()直接从镜像缓存中查询数据,避免直接查询数据库。例             如:_context.Products.FirstOrDefaultAsync(m => m.Id == id),可以修改为_context.Products.FindAsync(id).

    3.efcore 提供两种加载方式一种是eager loading 另一种是lazy loading.要使用eager loading加载对象集合数据可以对查询添加             Include().例如:_context.Products.Include(p=>p.ProductOrders).FindAsync(Id).

       而lazyloading 1.需要添加nuget包:Microsoft.EntityFrameworkCore.Proxies.      2.服务配置对于options的添加                UseLazyLoading():例如:services.AddDbContextPool<ContosoPetsContext>(options => options.UseLazyLoadingProxies().UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=ContosoPets;Integrated Security=true"));    3.对于entity类型中的集合得用virtual进行修饰例如: public virtual ICollection<ProductOrders> ProductOrders { get; set; }

    4.DbContext经常创建释放问题,可以使用上下文池,例如:将 services.AddDbContext修改为使用资源池 services.AddDbContextPool。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章