使用Entity Framework的SQL视图

时间:2012-05-26 18:50:49

标签: sql entity-framework view

我有一个SQL视图来与我的应用程序集成。到目前为止我一直在使用Entity Framework。但问题是,当我向Entity Framework添加一个视图时,它开始将我的视图视为一个表。

我真正想知道的是,我错过了什么?另外如果我使用Nhibernate会解决这个问题吗?它会仅将视图视为视图吗?

此视图是一个非常复杂的查询,具有多个连接和聚合。这就是我使用视图的原因。

1 个答案:

答案 0 :(得分:1)

  

但问题是当我向Entity Framework添加一个视图时   开始将我的观点视为一张桌子。

不,不。如果通过向导(EDMX设计器)向模型添加视图,它将在内部将视图作为定义查询处理,从而生成只读实体。在实体级别(概念模型),您没有看到差异,因为它只是另一个实体/类,但如果您尝试对该类的实例进行更改并保存它们,您将获得异常(除非您映射存储过程或用于插入,更新和删除该实体的操作的自定义SQL命令。

编辑:

数据库视图以及其他数据库特定功能(如存储过程或SQL函数)仅适用于数据库第一种情况(当您在设计器中使用数据库中的更新模型时)。

使用从模型生成数据库是针对模型第一种情况,你告诉VS:“这是我的模型,我想要一些数据库来存储它。”首先,仅使用来自概念模型的信息(每次运行此命令时,原始映射和数据库描述将替换为新的,因此甚至可以破坏映射到原始数据库)。它无法为您创建特定于数据库的功能,因为它不知道该类应该映射到视图,而且它不知道应该如何创建视图(原始视图中的查询未知)。

您可以强制VS为您创建视图,但在T4模板中需要以某种方式为视图提供SQL创建脚本。