我需要使用Entity Framework从数据库中加载一个+/- 20个表的模型。
所以可能有几种方法可以做到这一点:
以下是2个选项
的情况EF会创建一个巨大的查询,对数据库施加非常大的负担,然后再次映射模型。所以不是一个选择。
数据库被大量调用,但又有很多大问题。
同样,数据库被调用得更多,但这次只有很小的负载。
所有这些选择都会对性能造成沉重打击。我确实需要加载所有数据(绘图计算)。
那我该怎么办?
a)重操作=>重负荷=>没做什么 :) b)审查设计=>但怎么样? c)一个神奇的选择,将使所有这些问题消失
答案 0 :(得分:0)
当您需要从缺少不同的表中加载大量数据时,没有“神奇”的解决方案可以解决所有问题。但除了你已经讨论过的内容之外,你应该考虑投影。如果您不需要实体的每一个属性,那么投射您需要的信息通常会更便宜,例如:
from parent in MyEntities.Parents
select new
{
ParentName = ParentName,
Children = from child in parent.Children
select new
{
ChildName = child.Name
}
}
要记住的另一件事是,对于非常大的查询,编译查询的成本通常会超过执行它的成本。只有剖析可以告诉您这是否是问题所在。如果这是问题所在,请考虑使用CompiledQuery。
答案 1 :(得分:0)
您可以分析查询与更新的比率。如果您主要上传模型一次,那么其他所有内容都是查询,那么您可能应该将模型的XML表示存储在数据库中作为模型的“阴影”。您应该能够很快地读取整个XML列,或者也许您可以使用XQuery进行计算(或至少获取计算所需的值)。
这假定为SQL Server 2005或更高版本。
答案 2 :(得分:0)
您可以考虑将数据缓存在内存中,而不是每次都从数据库中获取数据。
我建议企业库缓存应用程序块:http://msdn.microsoft.com/en-us/library/dd203099.aspx