Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 首先使用EF 5代码将视图映射到实体_Linq_Entity Framework - Fatal编程技术网

Linq 首先使用EF 5代码将视图映射到实体

Linq 首先使用EF 5代码将视图映射到实体,linq,entity-framework,Linq,Entity Framework,我已经开发了一个相当不错的网络应用程序使用EF5和代码第一。但在运行基准测试时,我发现性能没有我想要的那么好。。。进一步看,我发现EF生成的所有查询都类似于Select*From,这不是最佳做法 在这里阅读这个答案,我明白我可以生成一个视图并将其映射到一个实体。我的问题是如何首先使用EF 5代码将视图映射到实体,或者反之亦然 我问这个问题的原因是:我有一个非常宽的表,在这个表上我按名称执行“初步搜索”搜索项目,然后在一个案例中返回它的其余部分。。。在另一个例子中,我有一个大表,大多数时候我只使用

我已经开发了一个相当不错的网络应用程序使用EF5和代码第一。但在运行基准测试时,我发现性能没有我想要的那么好。。。进一步看,我发现EF生成的所有查询都类似于
Select*From
,这不是最佳做法

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

我问这个问题的原因是:我有一个非常宽的表,在这个表上我按名称执行“初步搜索”搜索项目,然后在一个案例中返回它的其余部分。。。在另一个例子中,我有一个大表,大多数时候我只使用标题和描述,而不使用LOB列。。。在所有的情况下,我从数据库中得到一些我不使用的东西


因此,如果我确实可以将视图映射到实体,或者反之亦然,我可以在主干层和应用层之间节省大量带宽…

我实现这一点的方式不是很干净,但:

  • 我创建一个类型
  • 为类型声明一个dbset
  • 如有必要,将表格放入数据库中
  • 使用相同字段(类型和名称)创建名为已删除表的视图
当然,所有这些都封装在seed方法中

不干净,但在跑步。我认为如果您想“迁移”视图的结构,就会遇到一些麻烦。但这样的话,他所有的一切就好像你得到了一个实体。当然,插入和更新可能很棘手,但这不是我的目的


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

这与您所谈论的不是同一件事,即不是一个确切的答案,而是通过EF所称的“视图”来解决性能问题

我建议您尝试使用-和“生成视图”

通过运行它,“视图”文件被添加到项目中,这是一个
.cs
文件,它增强了核心EF性能(这是一个EF功能,不是代码优先,但对于电动工具,我们现在也可以将其与代码优先一起使用)

它没有添加“Db视图”,但据我所知,它通过预分析和代码生成SQL模板来工作

“在实体框架可以对概念模型执行查询之前 建模或保存对数据源的更改时,必须生成一组 访问数据库的本地查询视图。这些视图是 每个应用程序域缓存的元数据。如果 同一应用程序域中的多个对象上下文实例 将重用缓存元数据中的视图,而不是重新生成 因为视图生成是整个系统的重要组成部分 执行单个查询的成本,实体框架使您能够 预生成这些视图并将其包含在已编译的项目中 更多信息,请参阅性能注意事项(实体框架)。“

我可以“感觉”到性能的提升

注:
它有几个问题-第一次运行时可能会出现一些异常:

  • 确保您的类是文件中唯一的上下文(它取第一个)
  • 我不得不将项目移出“解决方案目录”(这是我从power shell控制台学到的一个诀窍,它需要相同的解决方案)
此外,任何其他试图用“真实”视图手动“调整”Db的尝试——我认为都是徒劳的,因为它没有与ORM紧密集成(您需要不止一个——以及匹配调用等)。

您尝试过“生成视图”吗