2012-04-26 95 views
2

我们有一个项目使用实体框架4.1代码优先进行数据存储。它的编码方式是将EF抽象到存储库模式后面。当从存储库中获取实体时,数据集会传入一个巨大的包含字符串列表,告诉它所有相关的实体也应该被提取。这会导致一个非常庞大的查询,可能需要10秒才能运行 - 即使数据库中没有数据!延迟加载相关实体不与实体框架一起使用4.1

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

我想改变的事情,以便在搜索数据库时,不包括字符串传递给数据集(或只是最小包括字符串)。当从数据库中提取实体时,它们的相关实体将在第一次访问时通过延迟加载进行加载。

我有一个名为捐赠与这样的导航性能等级:

public virtual Employee Donor { get; private set; } 

无论捐赠和员工类有一个私人参数的构造函数。当使用包含字符串“捐赠者”时,我可以获取捐赠列表,并且他们会随附Donor一起返回。

当我从没有包含字符串的存储库获取捐赠时,捐助者通常返回为空。如果偶然发生我以相关员工身份登录,系统中其他查询将已经从Employee存储库中提取我的Employee实体。发生这种情况时,员工设置正确返回捐赠!很显然,如果数据已经从先前的查询中获得,那么数据将被“延迟加载”。但总的来说,我不会再向捐助者和所有其他实体查询过。

任何人都可以提出我可能做错了什么?对于长期的问题抱歉。如果需要,我可以发布更多的代码,但它是完全不同的。提前致谢!

回答

4

我相信,如果你按照这个页面上的指导,http://msdn.microsoft.com/en-us/library/dd468057.aspx你应该得到你以后的结果。为了让你的无参数构造函数受到保护,这应该有所帮助。

但是,请看看其余的指导。

+0

哦。我的。神。我不知何故未找到您链接的指南页面。我不知道这个使用私有无参数构造函数的想法来自哪里......但它是有道理的,它需要一个受保护的构造函数。它现在有效!谢谢! – DaveBeta 2012-04-26 16:53:27

相关问题