2

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

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

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

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

public virtual Employee Donor { get; private set; }

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

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

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

4

1 回答 1

4

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

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

于 2012-04-26T16:18:19.207 回答