延迟加载不与Entity Framework 4.1一起使用的相关实体

时间:2012-04-26 16:15:18

标签: c# entity-framework-4.1 repository-pattern

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

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

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

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

public virtual Employee Donor { get; private set; }

Donation和Employee类都有一个私有的无参数构造函数。当使用包含字符串“Donor”时,我可以获取捐赠列表,并且在附加了捐赠者的情况下返回它们。

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

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

1 个答案:

答案 0 :(得分:4)

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

但是,请看其余的指导。