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


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映射数据库视图教程的详细内容,更多请关注其它相关文章!


# 工具  # ai  # c#  # c#类  # 主键  # go  # 建好  # 外贸seo推广营销  # 哈尔滨翻译网站建设论文  # 就像  # 字段名  # 如何实现  # 工作原理  # 数据库中  # 会报  # 或其他  # 的是  # 百家号关键词手机端排名  # 地推面销是营销还是推广  # 山西抖音seo方法分析  # 建站推广网站有哪些优势  # 柳州网站推广设计  # 网络推广营销写手  # 产品营销推广的意义  # 珂润营销推广渠道有哪些 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: mysql怎么查询数据_mysql基础查询语句使用教程  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  Golang如何使用log记录日志信息_Golang log日志记录方法总结  易车网官网直达入口 易车网在线登录入口  AI图层蒙版怎么用_AI图层蒙版应用技巧与设计实例  《土豆雅思》修改密码方法  PHP多语言网站的实现:会话管理与翻译函数优化教程  J*aScript类型数组_TypedArray使用  4399造梦西游3无敌版_4399游戏入口  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  虫虫助手如何更新游戏  使用jQuery精确检测除指定元素外任意位置的点击事件  抖音作品被限流怎么办 抖音内容优化与流量恢复方法  163邮箱登录入口官网 163.com邮箱登录入口  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  C++ static关键字作用_C++静态成员变量与静态函数  Highcharts雷达图径向轴数值标签实现教程  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  Lar*el 中高效执行多列更新:单次查询实现  《大周列国志》皇帝律令功能介绍  Python测试中模块导入路径解析的最佳实践  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  c++如何链接Boost库_c++准标准库的集成与使用  手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧  酷狗音乐多音轨设置教程  《虎扑》取消评分记录方法  苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程  安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法  邮编号码查询app有哪些_邮编号码查询推荐app及使用体验  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  风神瞳获取全攻略  微博网页版入口链接 微博网页版在线互动平台  智学网成绩单查询系统网_智学网学生平台登录  使用VS Code作为你的个人知识管理系统  电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  在Django单元测试中优雅处理信号:基于环境的条件执行策略  解决VS Code中Python版本冲突与输出异常的指南  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  《书耽》更换手机号方法  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  Chart.js 教程:自定义插件实现图表与图例间距调整  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  《图怪兽》退出登录方法  管理打开的编辑器:固定、分组和关闭技巧  创建快捷方式启动系统保护  我居然低估了 DeepSeek,这次更新它做到了这些!  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  教资成绩怎么查询 

 2025-12-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.