2013-04-02 172 views
2

我开发了一个使用EF 5和代码优先的相当不错的网络应用程序。但是,在运行基准测试时,我发现性能并不如我想要的那样高......看起来我进一步发现EF生成的所有查询都类似于Select * From,这不是最佳做法。使用EF 5代码优先将实体映射到实体

阅读这个答案在这里Select Specific Columns from Database using EF Code First我明白,我可以生成一个视图,并将其映射到一个实体。我的问题是,如何首先使用EF 5代码将视图映射到实体,反之亦然?

我问这个的原因是:我有我的名字进行“preliminar搜索”的搜索项,然后回去的,但有个情况下,剩下一个很宽的表......在另一个我一张大桌子和大多数的我只用标题和说明,而不是LOB列......在所有thouse情况下即时得到不使用数据库林东西的时候......

所以,如果我确实可以映射以一个实体或反之亦然我可以节省骨干网和应用层之间的带宽的很多...

+0

你尝试[EF电动工具(http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d) - 和“生成视图” – NSGaga

回答

0

的方式,我做到这一点不是很干净,但:

  • 我创建了一个类型
  • 声明dbset该类型
  • 如果需要删除该表在DB
  • 创建一个命名为使用相同的字段(类型和名称)删除的表视图。

当然全部被封装在种子方法。

不干净,但运行。如果您想“迁移”视图的结构,我认为会遇到一些麻烦。但是这样他就好像你得到一个实体一样。当然插入和更新可能会很敏感,但这不是我的目的。

如果您尊重命名约定,即使加载策略可用。

1

这不是一回事 - 即不是一个确切答案 - 但它是通过EF称之为“视图”来解决性能问题。

我建议你尝试一下EF Power Tools - 和“生成视图”。

通过运行 - 将'views'文件添加到项目中 - 这是一个.cs之一 - 并且增强了核心EF性能(这是一个EF功能,而不是代码优先 - 但使用动力工具我们现在可以在代码优先的情况下使用它)。

它不添加“Db的意见” - 但据我可以告诉 - 它的工作原理是预分析和代码生成的SQL模板。

“之前的实体框架可以针对概念 模型执行查询或更改保存到数据源,必须生成一组 本地查询视图来访问数据库。该意见是 的一部分如果您在同一应用程序域中创建多个对象上下文实例,则它们将从缓存的元数据中重用视图,而不是重新生成 它们。由于视图生成是在执行一个查询的整体 成本的显著部分,实体框架使您能够 预先生成这些意见,并将其纳入编译的项目。对于 更多信息,请参阅性能注意事项(实体框架)“
http://msdn.microsoft.com/en-us/library/bb896240.aspx

我能‘感觉’在性能上提升

调:
有它几个问题 - 你可能会得到一些例外运行它的第一次:

  • 确保类是唯一的文件(它需要第一个),
  • 我不得不将项目从'解决方案目录'(这是我从power-shell控制台了解到的一个技巧 - 它需要相同)

此外,任何其他尝试手动“好办法”数据库与“真实”的观点 - 将是徒劳的,我认为,因为它不是紧密结合瓦特/ ORM(你需要一个以上 - 和匹配的电话等)。

相关问题