Linq 首先使用EF 5代码将视图映射到实体
我已经开发了一个相当不错的网络应用程序使用EF5和代码第一。但在运行基准测试时,我发现性能没有我想要的那么好。。。进一步看,我发现EF生成的所有查询都类似于Linq 首先使用EF 5代码将视图映射到实体,linq,entity-framework,Linq,Entity Framework,我已经开发了一个相当不错的网络应用程序使用EF5和代码第一。但在运行基准测试时,我发现性能没有我想要的那么好。。。进一步看,我发现EF生成的所有查询都类似于Select*From,这不是最佳做法 在这里阅读这个答案,我明白我可以生成一个视图并将其映射到一个实体。我的问题是如何首先使用EF 5代码将视图映射到实体,或者反之亦然 我问这个问题的原因是:我有一个非常宽的表,在这个表上我按名称执行“初步搜索”搜索项目,然后在一个案例中返回它的其余部分。。。在另一个例子中,我有一个大表,大多数时候我只使用
Select*From
,这不是最佳做法
在这里阅读这个答案,我明白我可以生成一个视图并将其映射到一个实体。我的问题是如何首先使用EF 5代码将视图映射到实体,或者反之亦然
我问这个问题的原因是:我有一个非常宽的表,在这个表上我按名称执行“初步搜索”搜索项目,然后在一个案例中返回它的其余部分。。。在另一个例子中,我有一个大表,大多数时候我只使用标题和描述,而不使用LOB列。。。在所有的情况下,我从数据库中得到一些我不使用的东西
因此,如果我确实可以将视图映射到实体,或者反之亦然,我可以在主干层和应用层之间节省大量带宽…我实现这一点的方式不是很干净,但:
- 我创建一个类型
- 为类型声明一个dbset
- 如有必要,将表格放入数据库中
- 使用相同字段(类型和名称)创建名为已删除表的视图
如果您尊重命名约定,甚至可以使用加载策略。这与您所谈论的不是同一件事,即不是一个确切的答案,而是通过EF所称的“视图”来解决性能问题 我建议您尝试使用-和“生成视图” 通过运行它,“视图”文件被添加到项目中,这是一个
.cs
文件,它增强了核心EF性能(这是一个EF功能,不是代码优先,但对于电动工具,我们现在也可以将其与代码优先一起使用)
它没有添加“Db视图”,但据我所知,它通过预分析和代码生成SQL模板来工作
“在实体框架可以对概念模型执行查询之前
建模或保存对数据源的更改时,必须生成一组
访问数据库的本地查询视图。这些视图是
每个应用程序域缓存的元数据。如果
同一应用程序域中的多个对象上下文实例
将重用缓存元数据中的视图,而不是重新生成
因为视图生成是整个系统的重要组成部分
执行单个查询的成本,实体框架使您能够
预生成这些视图并将其包含在已编译的项目中
更多信息,请参阅性能注意事项(实体框架)。“我可以“感觉”到性能的提升 注:
它有几个问题-第一次运行时可能会出现一些异常:
- 确保您的类是文件中唯一的上下文(它取第一个)
- 我不得不将项目移出“解决方案目录”(这是我从power shell控制台学到的一个诀窍,它需要相同的解决方案)