延迟加载不使用实体框架 4.1 的相关实体



我们有一个使用实体框架 4.1 Code First 进行数据存储的项目。它的编码方式使 EF 抽象到存储库模式后面。从存储库获取实体时,数据集会传递一个巨大的包含字符串列表,告诉它也应该获取所有相关实体。这会导致一个疯狂的巨大查询,可能需要 10 秒才能运行 - 即使数据库中没有数据!

已经有很多使用存储库编写的代码来访问数据库,我需要在不破坏模式的情况下理想地提高性能。

我正在尝试更改内容,以便在搜索数据库时,不会将包含字符串传递到数据集(或只是最小的包含字符串)。从数据库中获取实体时,首次访问它们时将通过延迟加载加载其相关实体。

我有一个名为 Donation 的类,具有如下导航属性:

public virtual Employee Donor { get; private set; }

捐赠类和员工类都有一个私有的无参数构造函数。使用包含字符串"捐赠者"时,我可以获取捐赠列表,并附有捐赠者。

当我从没有包含字符串的存储库中获取捐赠时,捐赠者通常返回为 null。如果巧合的是,我以有问题的员工身份登录,则系统中其他地方的另一个查询已经从员工存储库中获取了我的员工实体。发生这种情况时,捐款将在正确设置员工的情况下返回!很明显,如果数据已经从早期查询中可用,则数据是"延迟加载"的。但总的来说,我不会已经询问捐助者和所有其他实体。

谁能建议我可能做错了什么?对不起,这个问题很长。如果需要,我可以发布更多代码,但它是完全不同的。提前感谢!

我相信如果您遵循此页面上的指南,http://msdn.microsoft.com/en-us/library/dd468057.aspx 您应该得到您想要的结果。 特别地保护您的无参数构造函数,这应该会有所帮助。

但是,请查看指南的其余部分。

最新更新