EF Lazy Load和Eager Load

1、Lazy Load方式(EF默认延迟加载)

通过vitual属性,或者context.Entry(cat).Collection(c => c.Products).Load();/context.Entry(product).Reference(p => p.Category).Load();方法。

其中context.Configuration.LazyLoadingEnabled = false;相当于把vitual注释掉。

2、Eager Load

                var cs = from c in context.Categories.Include("Products")
                         select c;
            using (var context = new KTStoreModel())
            {

                context.Database.Log = Console.Write;
                var customer = context.Customers.
                    Include("Orders.OrderDetails").
                    Include("Orders.OrderDetails.Product").
                    Where(c => c.Id < 5);

                foreach (var c in customer)
                {
                    Console.WriteLine(c.ContactName);
                    foreach (var o in c.Orders)
                    {
                        Console.WriteLine("\tOrder_Id:{0}", o.Id);
                        foreach (var od in o.OrderDetails)
                        {
                            Console.WriteLine("\t\tProduct_Id:{0}\t{1}\tPrice:{2}",
                                od.ProductId, od.Product.Name, od.Price);
                        }
                    }
                }
                Console.WriteLine("done");

            }
View Code

3、left join

            using (KTStoreModel context = new KTStoreModel())
            {
                context.Database.Log = Console.Write;
                var orderList = from orderDetail in context.OrderDetails
                                join order in context.Orders on orderDetail.OrderId equals order.Id
                                join product in context.Products on orderDetail.ProductId equals product.Id
                                select new { orderDetail, order, product };
                foreach (var odetail in orderList)
                {
                    string id = odetail.order.Id.ToString();
                    string product = odetail.product.Name;
                    Console.WriteLine($"订单编号:{id},商品:{product}");
                }
            }

 

posted @ 2022-04-02 14:43  江境纣州  阅读(62)  评论(0编辑  收藏  举报