跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 c# EF core 框架和数据库建模的问题
未分類
11 3 月 2021

关于 c# EF core 框架和数据库建模的问题

关于 c# EF core 框架和数据库建模的问题

資深大佬 : zxCoder 3

我有个问题,比如我现在有两个数据库模型,用户和比赛,一个用户可以参加多个比赛,是一对多的关系。但是一般查询用户信息不需要展示用户参加的比赛,只有特定的查询才需要。

像这种一对多关系,以往简单的情况我都是直接在 User 类里写 List<Contest>这样,然后框架会自动在数据库 Contest 表里生成对 User 的外键索引,然后查询 User 的时候也会自动把 List<Contest>查出来。

我想请问这样(“一般查询用户信息不需要展示用户参加的比赛,只有特定的查询才需要”)会影响查询的性能吗?(就是理论上来说,我知道这种小破项目没必要太早考虑这种东西)

大佬有話說 (7)

  • 資深大佬 : imshawer

    框架一般默认会帮你处理好延迟加载的问题,不放心可以跟踪一下查询。

  • 資深大佬 : chinvo

    ef 不会自动查出关联数据来,除非你显式加载对应的属性

  • 資深大佬 : zamesking

    正常的关联不会自动查出来,需要你现实加载通过“include”. 还有一种建模如果用 owned type,会自动加载。

  • 資深大佬 : beginor

    主的这种情况 EF 默认处理就很好了,默认就是按需加载,不会查询关联属性对应的数据,除非显示查询或者调用用到关联属性的内容,才会查询关联属性对应的数据。

  • 資深大佬 : Manweill

    在导航属性前面加上 virtual 关键字,就会在查询的时候默认不加载,只有通过 include 方法加载。例如,public virtual ICollection<Post> Posts { get; set; }

    原文链接 https://docs.microsoft.com/en-us/ef/core/querying/related-data/lazy

  • 資深大佬 : cenbiq

    EF Core 默认就是单表查询,如果你 Include 导航属性则会单次查询内(使用 SQL Join )加载该子表。如果你给导航属性加上 virtual 的话,仍然会默认加载单表,但调用 virtual 导航属性的 Get 访问器时会临时查询子表(懒加载,一般不建议这么干,考虑 DDD 时可能会用上)。至于关联表导航但不用外键,前几天 V2 还有个帖子有回答可以翻翻看。

  • 資深大佬 : Manweill

    @cenbiq 如果没有其它特殊设置的话,是必须要在导航属性加上 virtual 才会开启懒加载。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具