c# - 是否可以在 Entity Framework Core 2.1 版上自动映射数据库视图?
问题描述
我在 stackoverflow 上发现了这个关于映射视图并在 EF Core 中使用它的有趣问题。
根据其回答,以前的 EF Core 版本无法自动映射视图。
但是现在呢?根据实体框架 2.1 路线图,
EF Core 模型现在可以包含查询类型。与实体类型不同,
查询类型上没有定义键,不能插入、
删除或更新(即它们是只读的),但它们可以
由查询直接返回。查询类型的一些使用场景是:
- 映射到没有主键的视图
- (...)
所以问题是:是否有可能自动构建一个数据库上下文并映射它的视图(就像我们为一个普通的scaffold-dbcontext和一个现有的数据库做的那样)?如果是,有人知道怎么做吗?
或者唯一的方法仍然是手动创建它们,就像 Sampath Kaliyamurthy 在这个答案中对以前的 EF Core 版本所说的那样?
解决方案
解决方法:
我找到了一种解决方法,其中包括:
- 重命名视图(例如从“MyView”到“My_View”)
- 使用查询从该视图创建一个表
select * into table from view
,并将其命名为视图初始名称(例如,该表将命名为“MyView”) - 在表中设置一个主键
- 脚手架 DB,所以你得到所有的类和正确的映射
- 从映射描述符中删除
HasKey
属性 - 从数据库中删除表并使用其初始名称重命名视图(因此,再次从“My_View”到“MyView”)
这将使视图像普通的脚手架表一样工作,您将获得所有正确的映射和一切。
当然,唯一的区别是您将无法在其中插入数据或对其进行编辑。
但是没关系,因为如果您想使用视图,您从一开始就知道这一点!
但
考虑到这个问题仍然悬而未决......
...尽管有这种解决方法,我仍然想知道是否有一些更“即时”和“2.1-native”的东西,正如他们在路线图中所说的那样,在 ef 2.1 中引入。因此,任何帮助和/或答案都将不胜感激!
推荐阅读
- javascript - 我们如何确定客户是否通过手机查看我的网站?
- visual-studio-code - 奇怪的 HTML 格式更漂亮
- javascript - Ag-grid 在两个网格之间同步数据
- javascript - 使用 fetch api 向箭头函数添加隐式返回
- java - 如何根据过滤器将 csv 数据拆分为两个不同的 kafka 主题
- javascript - Material-ui 文本字段组件不看且无法正常工作
- python - 使用 Python 中的请求下载文件后损坏的 mp3
- .net - 压缩对象
- c++ - 没有 try/catch 块的构造函数的 C++ 异常处理
- refactoring - switchMap 中的相同 Observable