首页 > 解决方案 > 是否可以在 Entity Framework Core 2.1 版上自动映射数据库视图?

问题描述

在 stackoverflow 上发现了这个关于映射视图并在 EF Core 中使用它的有趣问题。
根据其回答,以前的 EF Core 版本无法自动映射视图。

但是现在呢?根据实体框架 2.1 路线图

EF Core 模型现在可以包含查询类型。与实体类型不同,
查询类型上没有定义键,不能插入、
删除或更新(即它们是只读的),但它们可以
由查询直接返回。查询类型的一些使用场景是:

  • 映射到没有主键的视图
  • (...)

所以问题是:是否有可能自动构建一个数据库上下文并映射它的视图(就像我们为一个普通的scaffold-dbcontext和一个现有的数据库做的那样)?如果是,有人知道怎么做吗?

或者唯一的方法仍然是手动创建它们,就像 Sampath Kaliyamurthy 在这个答案中对以前的 EF Core 版本所说的那样?

标签: c#asp.net-coreentity-framework-coreasp.net-core-2.1

解决方案


解决方法:

我找到了一种解决方法,其中包括:

  1. 重命名视图(例如从“MyView”到“My_View”)
  2. 使用查询从该视图创建一个表select * into table from view,并将其命名为视图初始名称(例如,该表将命名为“MyView”)
  3. 在表中设置一个主键
  4. 脚手架 DB,所以你得到所有的类和正确的映射
  5. 从映射描述符中删除HasKey属性
  6. 从数据库中删除表并使用其初始名称重命名视图(因此,再次从“My_View”到“MyView”)

这将使视图像普通的脚手架表一样工作,您将获得所有正确的映射和一切。
当然,唯一的区别是您将无法在其中插入数据或对其进行编辑。
但是没关系,因为如果您想使用视图,您从一开始就知道这一点!


考虑到这个问题仍然悬而未决......

...尽管有这种解决方法,我仍然想知道是否有一些更“即时”和“2.1-native”的东西,正如他们在路线图中所说的那样,在 ef 2.1 中引入。

因此,任何帮助和/或答案都将不胜感激!


推荐阅读