皇竹草有没有种子? 当前位置:首页>皇竹草有没有种子?>正文

皇竹草有没有种子?

发布时间:2019-04-23

原标题:Entity Framework Core 懒加载

孙柱子想到答应韩琳儿的事情,赶紧说道:“小民兄弟,这个药水你能不能抓紧时间配置啊?”

甘肃可以种植大叶女贞吗?

他不相信这个结巴书生能当说客,一般都是给自己带来李光弼的信件,不料这个书生却没有信件,他脸胀得通红,更加结结巴巴道:“李、李将军,让...卑职,带、带个口信给季、季将军。”
而且张无忌也说过除非如同张三丰这般武学奇才,刚柔并济,阴阳相调,能使水火相济,以浩瀚深不可测的武学修为包容一切的境界才能同修九阴九阳两股真气不会相互冲突,否则只差一步便会走火入魔而死。

不料,他们的计划最终还是功亏一篑,现在该怎么办?是退回都城,还是与唐军决一死战?

众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载。不过现在EF Core的开发团队打算恢复对这一功能的支持(目前还未发布,不过可以在Github上面下载进行测试)。

懒加载

懒加载也可以叫做按需加载、延迟加载。可以分两方面来理解,一方面指暂时不需要该数据,不用在当前马上加载,而可以推迟到使用它时再加载;另一方面指不确定是否将会需要该数据,所以暂时请不要加载,待确定需要后再加载它。懒加载是一种很重要的数据访问特性,可以有效地减少与数据源的交互(注意,这里所提的交互不是指交互次数,而是指交互的数据量),从而提升程序性能。

EF 6 懒加载

我们先来看一看在EF 6中的懒加载的使用方式。

实体定义:

    public class Order
    {
        public int OrderID { get; set; }
        public string CustomerID { get; set; }

        public DateTime? OrderDate { get; set; }

        public virtual ICollection<OrderDetail> OrderDetails { get; set; }
    }

    public class OrderDetail
    {
        public int OrderID { get; set; }
        public int ProductID { get; set; }
        public decimal UnitPrice { get; set; }
        public short Quantity { get; set; }
        public float Discount { get; set; }
        public virtual Order Order { get; set; }
    }

我们在这里定义订单订单明细实体,它们是一对多关系,通过OrderId字段进行关联。

        using (NorthwindContext context = new NorthwindContext()) {

            Order order = await context.Orders.SingleAsync(item => item.OrderID == 10253);

            Assert.NotNull(order);

            Assert.NotNull(order.OrderDetails);

            Assert.Equal(3, order.OrderDetails.Count);
        }
    }

在查询订单号为 10253 的订单后,如果我们需要访问订单的明细,不需要再编写一次数据查询的代码,直接访问导航属性即可,EF会自动帮我们填充属性的值。

懒加载需要注意以下两点:

  • 在配置中启用了懒加载(默认开启);
  • 实体类不能是封闭(sealed)类,导航属性必须是虚(virtual)属性。

在 EF Core 中启用懒加载

目前EF Core发布的最新版本中并不支持懒加载,开发人员必须使用Include方法,才能完成导航属性的加载。

        using (NorthwindContext context = new NorthwindContext()) {

            Order order = await context.Orders.Include(e => e.OrderDetails).SingleAsync(item => item.OrderID == 10253);

            Assert.NotNull(order);

            Assert.NotNull(order.OrderDetails);

            Assert.Equal(3, order.OrderDetails.Count);
        }

大家需要在Github上面下载最新的源代码来测试这一功能 aspnet/EntityFrameworkCore。

启用懒加载:

    public class NorthwindContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var sqlConnectionStringBuilder = new SqlConnectionStringBuilder {
                DataSource = "****",
                InitialCatalog = "Northwind",
                UserID = "sa",
                Password = "sa"
            };
            
            optionsBuilder.UseSqlServer(sqlConnectionStringBuilder.ConnectionString);
            
            optionsBuilder.UseLazyLoadingProxies();
            
            base.OnConfiguring(optionsBuilder);
        }

    }

要在通常的应用程序中使用,只需在DbContextOnConfiguring方法中添加对UseLazyLoadingProxies()扩展方法调用即可。

框架目前是通过Castle.Core框架来生成代理类来实现对导航属性的延迟加载,开发团队打算将该功能做为EF Core的可选安装包。

如果您对该功能感兴趣,可以在Github上面下载源代码进行测试。

编辑:北伯丁

发布:2019-04-23 04:28:01

当前文章:http://www.nsmsa.com.cn/ljwxa.html

吉林美人梅价格便宜吗? 凌霄花什么时候可以进行移栽呢? 紫叶李报价_紫叶李产地_紫叶李胸径 养植技巧:红王子锦带在花期时是该修剪还是该放任不管呢? 数百万棵北美海棠树苗,棵棵精品,不是好货不要钱 地径13cm紫薇价格哪里最低? 山西可以种植枫杨吗? 连翘苗多少钱一棵?

93984 39758 59926 81635 12640 50787 85364 35978 95580 38703 85555 85542 40969 72568 32210 23850 65822 25617 80669 35986

责任编辑:通秉