Entity framework 延迟加载在EDMX生成的实体框架6中不起作用

Entity framework 延迟加载在EDMX生成的实体框架6中不起作用,entity-framework,lazy-loading,Entity Framework,Lazy Loading,我有一个项目长期以来一直在使用旧版本的Entity Framework,但我需要更新数据库模式(首先使用数据库),因此Visual Studio 2013决定在我更改EDMX文件时将我升级到EF 5(我现在已升级到EF 6) 在我之前使用的实体框架中,延迟加载似乎不起作用,但我可以对集合或对象调用.Load(),然后从数据库中加载它 e、 g,这在旧EF中有效: public ICollection<CategoryItem> LoadedCategoryItems {

我有一个项目长期以来一直在使用旧版本的Entity Framework,但我需要更新数据库模式(首先使用数据库),因此Visual Studio 2013决定在我更改EDMX文件时将我升级到EF 5(我现在已升级到EF 6)

在我之前使用的实体框架中,延迟加载似乎不起作用,但我可以对集合或对象调用.Load(),然后从数据库中加载它

e、 g,这在旧EF中有效:

public ICollection<CategoryItem> LoadedCategoryItems
{
      get
      {
    CategoryItems.Load();
        return CategoryItems;
      }
}
它通过某种方式预加载来解决这个问题,但我的数据库中有一个多对多的关系,我不知道如何以这种方式预加载,所以现在我被卡住了,不能再进一步了

由于该类的代码是由edmx文件创建的t4模板生成的,因此它肯定是虚拟的:

public virtual HashSet<CategoryItem> CategoryItems { get; set; }
公共虚拟哈希集类别项{get;set;}
包含该对象的类是一个动态代理,并且启用了延迟加载

所以我不清楚为什么惰性加载不起作用,或者如何调试它来找出它不起作用的原因

我怎么知道发生了什么事

谢谢,
Stefan

由于历史原因(延迟加载前),一些EDMX生成的代码使用私有getter。这已经不是延迟加载所能做到的,所以这些都必须改为公共getter

为什么你认为延迟加载不起作用?您在哪里访问类别项目?(LazyLoading意味着一旦您使用它,它将加载数据-因此对于要加载的CategoryItems,您需要调用get of it-您是否正在访问它,而不是显示代码的这一部分)当我尝试访问它时,比如在for循环中,列表中没有任何项目。另一个例子是:public Image LoadedImage{get{return Image;}}}这里是由EDMX:public virtual Image{private get;set;}生成的代码,当尝试访问映像(即:使用get)时,它会崩溃,因为它为null。但是如果在初始化应用程序时我这样做:database.Images.Load();它是有效的,这意味着延迟加载不起作用。你做错了什么,我对EF6中的懒散加载没有问题,因为我不会忽略为延迟加载设置的要求,我希望你已经设置好了。特别是你可以检查“ProxyCreationEnabled选项必须设置为true”这一点。我肯定知道其他人正在让它工作,问题是为什么它对我不起作用(似乎其他人也在相同的场景中)?由于代码是从edmx文件生成的,因此它满足您建议的链接中指定的所有要求。在以前的版本中,至少我可以解决这个问题。现在我遇到了一个无法解决这个问题的情况,我不知道为什么惰性加载不起作用。正如我在帖子中所说,代理创建正在工作&我已经确认它已打开,因此我需要一种方法来调试代理为什么没有执行它应该执行的操作。如果您愿意,您可以向我发送一个测试应用程序,您正面临此问题。恐怕我也无能为力。不确定您是否知道Include,但是通过它,您可以预加载导航属性,也可以使用多对多关系。对于普通关系,include类似于.include(“CategoryItems”)-多对多关系类似于.include(“CategoryItems.CategoryGroup.Category.SomeRandom”)-通过此选项,您可以指定所需表的路径,EF将加载所有必要的内容。
database.CategoryItems.Load();
public virtual HashSet<CategoryItem> CategoryItems { get; set; }