新闻中心
EF Core怎么使用视图(View) EF Core映射数据库视图教程
EF Core 使用数据库视图需先建好视图再以无主键实体映射:1. 数据库中创建视图;2. 定义无主键C#类;3. 在DbContext中用ToView()和HasNoKey()配置;4. 可直接LINQ查询。

EF Core 使用数据库视图,核心就两点:视图要先在数据库里建好,然后在代码里按“无主键实体”映射过去,就能像查表一样查询、过滤、排序。
1. 先在数据库中创建视图
用 SQL Server Management Studio 或其他工具执行类似语句:
- CREATE VIEW View_BookDetails AS SELECT b.Id, b.Name, b.Author, c.Name AS CateName FROM Books b JOIN Categories c ON b.CateId = c.Id
- 视图名建议用英文、不带空格和特殊字符(如 View_BookDetails)
- 加密视图、带参数的视图 EF Core 不支持直接映射,避免使用
2. 定义对应视图的 C# 类
这个类只是数据容器,不需要主键,字段名和类型要跟视图返回列一致:
- public class View_BookDetails { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public string Ca
teName { get; set; } } - 字段名不区分大小写,但建议跟视图列名保持一致,减少映射歧义
- 不用加
[Key]或其他主键特性——视图通常没主键,EF Core 会自动识别为无键实体
3. 在 DbContext 中配置映射
两种主流方式,推荐用 Entity 配置(EF Core 3.0+ 统一推荐):
QoQo
QoQo是一款专注于UX设计的AI工具,可以帮助UX设计师生成用户角色卡片、用户旅程图、用户访谈问卷等。
172
查看详情
- 在
OnModelCreating中写:
modelBuilder.Entity().ToView("View_BookDetails");
modelBuilder.Entity().HasNoKey(); - 如果要用 DbQuery(旧方式,仅限 EF Core 2.x 兼容),也可加:
public DbQueryView_BookDetails { get; set; } ,再配modelBuilder.Query<view_bookdetails>().ToView(...)</view_bookdetails> -
注意:EF Core 5+ 已废弃
DbQuery,统一用Entity.ToView()+HasNoKey()
4. 查询视图就像查普通 DbSet
注入 DbContext 后,直接 LINQ 操作即可,完全支持 Where、OrderBy、Take 等:
- var books = context.Set
().Where(x => x.Author.Contains("张")).OrderBy(x => x.Name).ToList(); - 也可以提前声明 DbSet 属性(可选):
public DbSetBookViews { get; set; } ,然后用context.BookViews.Where(...) - 视图查询走的是 SQL,不是内存计算,性能取决于数据库视图本身的执行效率
基本上就这些。不复杂但容易忽略的是:视图必须存在、类字段要对齐、必须显式调用 HasNoKey(),否则 EF Core 会报“无法推断主键”的错误。
以上就是EF Core怎么使用视图(View) EF Core映射数据库视图教程的详细内容,更多请关注其它相关文章!
# 建好
# 绍兴城市营销推广公司
# 东营市关键词seo排名优化
# 和seo有关系的公司
# 济南市淘宝推广招聘网站
# 淘宝推广适合那个网站
# 怎么创建的网站建设管理
# 漯河网站建设服务
# 井陉抖音关键词搜索排名
# seo商城程序
# 旺道seo优化诊断
# 就像
# 字段名
# go
# 如何实现
# 工作原理
# 数据库中
# 会报
# 或其他
# 的是
# 主键
# c#类
# c#
# ai
# 工具
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
邮政快递单号查询入口 邮政快递物流信息在线查询入口
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
yy漫画网页版官方入口_yy漫画官网登录页面链接
我的世界官方游戏入口 我的世界官网平台直达链接
C++如何比较两个字符串_C++ string compare函数与操作符对比
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
12306选座系统怎么选连座_12306选座多人连坐操作方法
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
AI泡沫首次被“刺破”:GPU十年都无法存活!
微博网页版主页入口 微博官方网站免登录访问
高德地图公交到站提醒失败如何解决 高德提醒权限设置
R星幕后开发视频泄露 包含《GTA6》等多款大作
顺丰快递查询系统 官方正版查询入口
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
windows10怎么关闭系统提示音_windows10彻底静音设置方法
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
微信群消息显示延迟如何解决 微信群消息刷新优化方法
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
微信聊天记录怎么加密_微信聊天记录加密方法
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程
steam官方网页快速访问 steam账号注册全流程
Python:递归比较文件夹内容并找出特定类型文件的差异
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
如何将HTML表格多行数据保存到Google Sheets
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
解决Django多数据库/多Schema环境下外键迁移问题
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置
如何使用 Excel 发布器与 Power BI 分享 Excel 洞察
cad如何更改注释性对象的比例_cad注释性比例调整方法
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
J*aScript异步迭代器_j*ascript异步遍历
HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解


2025-12-15
浏览次数:次
返回列表
teName { get; set; } }