zoukankan      html  css  js  c++  java
  • EF Core – 冷知识

    Add vs AddAsync

    参考: 

    .NET 5 REST API Tutorial

    AddAsync() vs Add() in EF Core

    EF Core’s AddAsync v. Add Method

    EF Core in ASP.NET Core - CRUD

    无意间再看视频的时候, 看见有人使用 AddAsync. 在我的认知 Add 只是修改了 local 的 entity, SaveChangesAsync 才会链接数据库.

    所以按道理, Add 不需要 Async 丫. 虽然说 "有 Async 就尽量用 Async“ 是没错, 但是不直观丫. 

    于是搜了一下. 结论是 AddAsync 是用于那些需要 auto generate id 之类的情况的. 很冷门的情况啦. 

    所以绝大部分情况下是不需要的, 那用 Async 会伤性能吗, 有 ValueTask 所以是不会的. 但即便如此,为了更好的了解, 我建议是用 Add 就好了.

    ValueGenerated

    参考: Generated Values

    Value Generated 讲的就是那种 default value 或者 SQL trigger 维护的值.

    一共有 5 个方法

    ValueGeneratedNever 是用来覆盖 EF Core 默认行为的, 比如 primary key 默认就是 auto generate 的, 这个很少会用到

    ValueGeneratedOnUpdateSometimes, 这个我没有看懂什么意思, sometimes? 没有找到相关资料. 

    ValueGeneratedOnAdd 这个就是说在 insert 的时候 SQL 会负责 generate value, 但是如果我们在 entity 有 set value 的话, 它会用我们的 value 哦, 不清楚是不是 bug (v6.0 测试是这样)... 但是 by right 我们不应该给 value 啦

    ValueGeneratedOnUpdate 就是说在 update 的时候 SQL 会负责 generate value, 所以 EF 会无视 entity 的 value, 你改了也没用. 它不会反应到 SQL 语句里的.

    ValueGeneratedOnAddOrUpdate 就是 Add + Update, 一起, 奇怪应该叫 And 而不是 Or 吧... set 了这个之后 insert 的时候即使 Entity 有 value 也没用了, 它会无视.

    当设置了 ValueGenerated 以后, 在 insert/update 后, EF 会去跑 select 把新的值拿来 update entity, 但是它不支持跨 Entity 啦, 比如你 update Entity A, 但是 SQL trigger update B Table, 然后 Entity B 是不会被更新的.

  • 相关阅读:
    网页前端开发,对于图片慢加载简介
    createDocumentFragment
    mobile端
    Handler对象
    移动应用表单设计秘籍
    【194】Windows 上使用 wget
    【193】◀▶ PowerShell 官方资料索引
    【192】PowerShell 相关知识
    【191】◀▶ Powershell 命令集 Cmdlets
    高性能MySql进化论(九):查询优化器常用的优化方式
  • 原文地址:https://www.cnblogs.com/keatkeat/p/15463561.html
Copyright © 2011-2022 走看看