我有一个与我的应用程序集成的 SQL 视图。到目前为止,我一直在使用实体框架。但问题是,当我向 Entity Framework 添加视图时,它开始将我的视图视为表格。
我真正想知道的是,我错过了什么吗?另外,如果我使用 Nhibernate,这个问题会得到解决吗?它将视图仅视为视图吗?
这个视图是一个非常复杂的查询,它有多个连接和聚合。这就是我使用视图的原因。
我有一个与我的应用程序集成的 SQL 视图。到目前为止,我一直在使用实体框架。但问题是,当我向 Entity Framework 添加视图时,它开始将我的视图视为表格。
我真正想知道的是,我错过了什么吗?另外,如果我使用 Nhibernate,这个问题会得到解决吗?它将视图仅视为视图吗?
这个视图是一个非常复杂的查询,它有多个连接和聚合。这就是我使用视图的原因。
但问题是,当我向 Entity Framework 添加视图时,它开始将我的视图视为表格。
不,它没有。如果您通过向导(EDMX 设计器)将视图添加到模型中,它将在内部将视图作为定义查询处理,该查询会生成只读实体。在实体级别(概念模型)您看不到差异,因为它只是另一个实体/类,但是如果您尝试更改该类的实例并保存它们,您将得到一个异常(除非您映射存储过程或用于对该实体进行插入、更新和删除操作的自定义 SQL 命令)。
编辑:
数据库视图以及存储过程或 SQL 函数等其他数据库特定功能仅适用于数据库优先方案(当您在设计器中使用从数据库更新模型时)。
使用从模型生成数据库适用于模型第一个场景,您告诉 VS:“这是我的模型,我想要一些数据库来存储它。” 首先,仅使用来自概念模型的信息(每次运行此命令时,原始映射和数据库描述都会被替换为新的,因此即使映射到原始数据库也可能会被破坏)。它无法为您创建数据库特定的功能,因为它不知道应该将类映射到视图,而且它不知道应该如何创建视图(来自原始视图的查询是未知的)。
您可以强制 VS 为您创建视图,但在 T4 模板中需要做很多工作,您必须以某种方式为视图提供 SQL 创建脚本。