1

我有一个项目长期使用旧版本的实体框架,但我需要更新数据库架构(首先使用数据库),所以 Visual Studio 2013 决定将我升级到 EF 5(我现在已经升级到 EF 6) 当我更改 EDMX 文件时。

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

例如,这适用于旧 EF:

public ICollection<CategoryItem> LoadedCategoryItems
{
      get
      {
    CategoryItems.Load();
        return CategoryItems;
      }
}

在 EF 5/6 中,CategoryItems 的计数为 0,因此延迟加载似乎永远不会起作用:

public ICollection<CategoryItem> LoadedCategoryItems
{
    get
    {
        return CategoryItems;
    }
}

除了做这样的事情之外,这似乎没有办法强制加载:

database.CategoryItems.Load();

通过以某种方式预加载它可以解决它,但是我的数据库中有一个多对多的关系,我无法弄清楚如何以这种方式预加载,所以现在我非常卡住并且无法继续前进。

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

public virtual HashSet<CategoryItem> CategoryItems { get; set; }

包含该对象的类是动态代理,并且开启了延迟加载。

所以我不清楚为什么延迟加载不起作用或如何调试它以找出它为什么不起作用?

我怎样才能弄清楚发生了什么?

谢谢,斯特凡

4

1 回答 1

0

由于历史原因(延迟加载前),一些 EDMX 生成的代码使用了私有 getter。这现在不是你可以用延迟加载做的事情,所以这些都必须改为公共吸气剂

于 2013-10-26T20:51:14.713 回答