我正在研究的项目有DbContext,可以跟踪很多不同的实体。由于涉及大量关系,在生成其视图时第一次从上下文查询需要很长时间。为了减少启动时间,并更好地将环境组织到功能区域,我正在寻找将它分开的方法。
这些是我迄今为止尝试过的一些方法,以及我与他们见过的问题:
这没有任何帮助,因为EF似乎遍历所有导航属性并且包括所有相关实体(至少根据LINQPad,它显示了与Context相关的所有实体)在连接面板中)。我们有一些具有深远意义的顶级实体,因此很少有子集可以完全隔离而无需删除导航属性并进行大量重构。
public class PersonLight
{
public int Id { get; set; }
public string Name { get; set; }
public int JobId { get; set; }
}
public class Person : PersonLight
{
public Job Job { get; set; }
}
public class ContextLight : DbContext
{
public virtual DbSet<PersonLight> People { get; set; }
}
这里也没有骰子。即使人员根本没有被使用,但EF(或者可能只是LINQPad)包括Person
,尽管它不能被使用。我认为这是因为EF支持继承模式,因此它也会在这个方向上结束对相关实体的爬行。
PersonLight
和Person
(或在不同项目中使用partial
类)。这是目前为止的最佳选择,但如果PersonFields
旁边有Person
以便于参考,那就太棒了。所以我的问题是:
感谢。
答案 0 :(得分:1)
加速发展的选项:
具有讽刺意味的是,IIS应用程序池只需要生成一次视图。 基于我的测试的命令行,每次都生成视图。 不确定linqpad是做什么的。
BTW我之前没有添加此链接,因为您标记了EF6。 但是如果其他人不在EF6上。报告了一些性能改进。更多信息: EF6 Ninja edition