新闻中心

EF Core怎么使用视图(View) EF Core映射数据库视图教程

2025-12-15
浏览次数:
返回列表
EF Core 使用数据库视图需先建好视图再以无主键实体映射:1. 数据库中创建视图;2. 定义无主键C#类;3. 在DbContext中用ToView()和HasNoKey()配置;4. 可直接LINQ查询。

ef core怎么使用视图(view) ef core映射数据库视图教程

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 CateName { get; set; } }
  • 字段名不区分大小写,但建议跟视图列名保持一致,减少映射歧义
  • 不用加 [Key] 或其他主键特性——视图通常没主键,EF Core 会自动识别为无键实体

3. 在 DbContext 中配置映射

两种主流方式,推荐用 Entity 配置(EF Core 3.0+ 统一推荐):

QoQo QoQo

QoQo是一款专注于UX设计的AI工具,可以帮助UX设计师生成用户角色卡片、用户旅程图、用户访谈问卷等。

QoQo 172 查看详情 QoQo
  • OnModelCreating 中写:
    modelBuilder.Entity().ToView("View_BookDetails");
    modelBuilder.Entity().HasNoKey();
  • 如果要用 DbQuery(旧方式,仅限 EF Core 2.x 兼容),也可加:
    public DbQuery View_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 DbSet BookViews { 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中向量嵌入维度调整的限制与理解 

搜索