现在 asp.net core 开发都用 EF 来操作数据库了吗?还会用 sql 语句去建表和插初始数据吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容 style type="text/css"> #Wrapper { background-color: #e2e2e2; background-image: url("/static/img/shadow_light.png"), url("//cdn.v2ex.com/assets/bgs/circuit.png"); background-repeat: repeat-x, repeat-x; } #Wrapper.Night { background-color: #1f2e3d; background-image: url("/static/img/shadow.png"), url("//cdn.v2ex.com/assets/bgs/circuit_night.png"); background-repeat: repeat-x, repeat-x; background-size: 20px 20px, 162.5px 162.5px; }
289396212
V2EX    程序员

现在 asp.net core 开发都用 EF 来操作数据库了吗?还会用 sql 语句去建表和插初始数据吗?

  •  
  •   289396212 2023-08-12 19:36:39 +08:00 2785 次点击
    这是一个创建于 796 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用 EF 是趋势吧? sql 语句建表和插原始数据(比如省市数据这些)有什么不可替代的点吗?
    17 条回复    2023-08-14 10:05:16 +08:00
    idragonet
        1
    idragonet  
       2023-08-12 19:44:32 +08:00
    有其他 ORM ,例如:CYQ.Data 、SqlSugar
    xuanbg
        2
    xuanbg  
       2023-08-12 19:47:03 +08:00   1
    我还是喜欢先数据建模,然后手写数据库初始化的 sql 。先深入理解业务,然后才能正确设计数据模型来表述业务。这样后期写代码可以写得比较简单,也不用改来改去。即使需求变化,稍微调整下数据模型也就能够支持新需求了。有时候甚至什么都不用改,也能支持新需求。
    a33291
        3
    a33291  
       2023-08-12 20:00:21 +08:00
    部分复杂的统计业务直接用 ef 或者类似的 orm 好像都不好看,还是直接写 sql 比较合适.

    推荐一下 ServiceStack.OrmLite
    opengps
        4
    opengps  
       2023-08-12 20:05:37 +08:00
    都行啊,你想操作什么都可以,我用 ef 只是省事而已,但我现在接触的工业项目都直接写原始 sql
    kkwa56188
        5
    kkwa56188  
       2023-08-12 20:08:02 +08:00
    建表和 插入数据 那都是简单的操作, 替不替代都差不了多少.
    SQL 语句 的 核心竞争力 是 灵活高效的 查询 以回应 复杂的业务需求
    acctv2
        6
    acctv2  
       2023-08-12 20:54:58 +08:00
    EF 只是可以 codefirst ,不是说一定要 codefirst
    qiufengshe
        7
    qiufengshe  
       2023-08-12 22:06:33 +08:00
    用 EF,也会用写 SQL,一般的查询会用 EF,复杂的,拿统计来说,会写 SQL 拿 Dapper 查询
    thinkershare
        8
    thinkershare  
       2023-08-12 22:12:55 +08:00
    不管使用什么方式,数据库操作都被放在外围的适配器中,领域模型始终是独立与数据库的. 考虑性能的情况下使用 Dapper 或者干脆写 SQL. 除了性能也业务及其不规范的情况,或者数据库使你无法掌控的情况,还有查询极度复杂(这种情况一般会使用 CQRS), 直接写 SQL 没啥优势,只有缺陷.另外一些特殊的的原子操作会直接使用数据库的触发器.
    idealhs
        9
    idealhs  
       2023-08-12 22:13:23 +08:00
    EF 一样可以先建表
    roundgis
        10
    roundgis  
       2023-08-12 22:24:45 +08:00 via Android
    用 dapper 也可以
    xiaodei
        11
    xiaodei  
       2023-08-13 00:56:11 +08:00
    用 EF 搞简单的表可以从对象映射到 sql 生成,复杂的表我直接用 dapper,如果项目要求比较高,或者多个人写的话我会简单封装一下,好别人理解
    netnr
        12
    netnr  
       2023-08-13 06:40:52 +08:00
    我一直使用的步骤
    1. PowerDesigner 进行表设计,再生成建表脚本
    2. Scaffold-DbContext 生成实体并强制覆盖更新
    3. db.Database.EnsureCreated() 判断不能存在则建表、写入样本数据
    4. 更新 PowerDesigner 重复操作 1 、2 步骤

    开发 数据库优先,部署 代码优先
    libasten
        13
    libasten  
       2023-08-13 07:29:14 +08:00
    ef 可以在有表的情况下,做映射,帮你把模型类生成好,总之,这玩意就是一个工具。
    lujiaxing
        14
    lujiaxing  
       2023-08-13 11:27:10 +08:00
    不一定. 有些项目是必须要求先做数据库结构文档的. 例如一些给政府机构做的项目, 当地大数据局事后是可能会要产品的数据结构文档的. CodeFirst 的数据库大概率根本不做这种东西, 数据库结构文档就是实体类. 这种情况下还要现搞数据库结构文档. 所以还不如事先就做好 DBM, 然后从 DBM 直接生产数据库结构和实体类来的方便.
    sl797
        15
    sl797  
       2023-08-13 13:33:29 +08:00
    不管是 EF 还是 Dapper ,官方从来没说过只能用一种方案。
    都是根据业务场景来的,有的人员和基础数据管理模块上,本身 EF 就足够了。
    sl797
        16
    sl797  
       2023-08-13 13:36:50 +08:00
    @sl797 当面对复杂的逻辑时,用 dapper 写复杂查询 也是可以的。 如果是微服务,那就更简单了,业务直接与框架无关
    nightsky
        17
    nightsky  
       2023-08-14 10:05:16 +08:00
    一般都是 ORM+少量 SQL ,在.NET 上好用的 ORM 不少,比如 EF ,FreeSql 等。但是复杂的场景,还是写 sql 更直接。90%的场景可以用 ORM 解决,剩下的就是写 sql 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     905 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 21:48 PVG 05:48 LAX 14:48 JFK 17:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86