Forcing eager-loading for a navigation property

大兔子大兔子 提交于 2019-12-08 16:03:07

问题


I'm using EF Code First and I have a navigation property called Category that I want eager loaded in every call:

public class Product
{
    ...
    public Category Category { get; set; }
}

To do this I have to include it in every call I'll do on Product

var results = from p in db.Products.Include("Category") select p;

Is there a way to have Category property eager loaded, therefore generation a SQL join, in every call without having to include it every time?

thank you


回答1:


You can use helper method as proposed by @jeroenh but it will not solve situation where you for example want to load order with all ordered products and their categories. EF doesn't have any automatic eager loading configuration as for example available in Linq-to-sql. You must always use Include (either directly or by some helper construction).




回答2:


One simple way would be to define an extension method

static class DbExtensions{
   public IQueryable<Product> ProductsWithCategories(this MyContext db) {
       return db.Products.Include("Category");
   }
}

Which allows you to use

var results = from p in db.ProductsWithCategories() select p;

Not sure if it brings much benefit though...



来源:https://stackoverflow.com/questions/5955544/forcing-eager-loading-for-a-navigation-property

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!