如何快速将 SQL Server 2022 的几十张表转成 C# 的 Class? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hahade
V2EX    数据库

如何快速将 SQL Server 2022 的几十张表转成 C# 的 Class?

  •  
  •   hahade 2024-04-23 10:23:20 +08:00 2785 次点击
    这是一个创建于 535 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天领导让我将 SQL Server 2022 的几十张表转成 C# 的 Class ,本想着可以到网上找个工具生成一下就行了,但是找了好久并没有发现有可以直接使用的工具。

    各位 V 友有好的工具吗?感谢!

    33 条回复    2024-04-24 00:41:55 +08:00
    forgottencoast
        1
    forgottencoast  
       2024-04-23 10:28:34 +08:00
    有啊,Entity Framework (Core)的工具啊,具体用法问 chatGPT 。
    whitegerry
        2
    whitegerry  
       2024-04-23 10:29:05 +08:00
    Scaffolding?
    ktqFDx9m2Bvfq3y4
        3
    ktqFDx9m2Bvfq3y4  
       2024-04-23 10:30:15 +08:00
    我是通过建立一个 GPT 来解决的
    hahade
        4
    hahade  
    OP
       2024-04-23 10:33:24 +08:00
    @forgottencoast 问 GPT 还得人工再核对一下才行,毕竟担心生成错了。
    forgottencoast
        5
    forgottencoast  
       2024-04-23 10:37:41 +08:00
    @hahade
    这种现有数据库后有类叫 Database First ,你可以通过这个关键字找到官方文档。
    比如:
    https://learn.microsoft.com/en-us/ef/ef6/modeling/designer/workflows/database-first
    foxhunt
        6
    foxhunt  
       2024-04-23 10:37:41 +08:00
    使用 Entity Framework (EDMX) 创建数据模型
    或自己写下代码生成器
    mmdsun
        7
    mmdsun  
       2024-04-23 10:38:51 +08:00
    niubee1
        8
    niubee1  
       2024-04-23 10:40:33 +08:00
    你自己写一下,能有多大个事儿,不行你用 AI 给你写一个
    Daming
        10
    Daming  
       2024-04-23 10:41:39 +08:00
    hahade
        11
    hahade  
    OP
       2024-04-23 10:42:36 +08:00
    大家推荐的都好复杂,有没有一个图形化的界面,直接连接数据库,然后我批量选择几个表一次生成?
    ScqLl
        12
    ScqLl  
       2024-04-23 10:43:13 +08:00
    SqlSugar ,Db First 实体生成
    https://www.donet5.com/Home/Doc?typeId=1207
    idealhs
        13
    idealhs  
       2024-04-23 10:44:53 +08:00   1
    这种经典老番就别和别人争论了,都是成熟的不能再成熟的东西,你非要用 GUI 就去买 Rider,那个带了 EF Core 工具的 GUI 插件
    clorischan
        14
    clorischan  
       2024-04-23 10:45:39 +08:00
    baibaibaibai
        15
    baibaibaibai  
       2024-04-23 10:45:40 +08:00
    dbfirst
    lujiaxing
        16
    lujiaxing  
       2024-04-23 10:47:29 +08:00
    其实这个就挺好用的啊... 还支持多种数据库, 还能自定义生成.

    https://www.cnblogs.com/flashbar/archive/2012/01/04/MyGenerator.html
    hahade
        17
    hahade  
    OP
       2024-04-23 10:49:58 +08:00
    @lujiaxing 感谢,似乎这个最适合我,我下载试试看。
    iLoveSS
        18
    iLoveSS  
       2024-04-23 11:14:29 +08:00
    为什么平时 dotnet 板块看着冷冷清清,问个问题就都冒出来了
    hahade
        19
    hahade  
    OP
       2024-04-23 11:22:44 +08:00
    @lujiaxing 经过测试,整体上没什么问题,但它把我的 [datetime not null] 生成为 [DateTime?] 了,看来我还是要人工核对一下。
    nulIptr
        20
    nulIptr  
       2024-04-23 12:10:53 +08:00
    曲线救国一下也可以数据库导出建表 sql 脚本,拿着建表脚本生成实体结构
    ktqFDx9m2Bvfq3y4
        21
    ktqFDx9m2Bvfq3y4  
       2024-04-23 12:20:30 +08:00
    @hahade #4
    是 GPT 不是 ChatGPT 。我自己就搞了一个因为我的 ORM 是自己封装过一次用来屏蔽底层实现的,直接把创建表的 Sql 给它它就能按我的要求生成。目前相当稳定,没什么问题:有的问题就是我有时候让它省去字段名符合 C#的命名规范,有的它会继续加上:但这并不影响。
    a33291
        22
    a33291  
       2024-04-23 12:40:22 +08:00
    试试这个
    https://www.devart.com/entitydeveloper/
    记得还有叫 codesmith 的代码生成工具
    ZGame
        23
    ZGame  
       2024-04-23 13:20:23 +08:00
    自己写一个上大分!很简单的
    calmack0x452
        24
    calmack0x452  
       2024-04-23 13:24:10 +08:00
    @Chad0000 自己本地搭建的 GPT ?
    ktqFDx9m2Bvfq3y4
        25
    ktqFDx9m2Bvfq3y4  
       2024-04-23 13:33:19 +08:00 via iPhone
    @calmack0x452
    不是,plus 会员。现阶段 ai 就一个选择:openai
    lujiaxing
        26
    lujiaxing  
       2024-04-23 13:52:46 +08:00
    @hahade 可以改模板的.
    cslive
        27
    cslive  
       2024-04-23 13:58:22 +08:00
    自己写一个,读取表结构,用模板生成
    jones2000
        28
    jones2000  
       2024-04-23 14:46:40 +08:00
    找个实习生,半天就给你搞完了。
    lujiaxing
        29
    lujiaxing  
       2024-04-23 15:36:52 +08:00
    @jones2000 你扯吧 十多个表 就按平均每张表 15 个字段算, 半天你也搞不完好吧...
    Ritr
        30
    Ritr  
       2024-04-23 15:56:32 +08:00
    Entity Framework 神器
    jones2000
        31
    jones2000  
       2024-04-23 22:14:39 +08:00
    @lujiaxing 19 张表 ,每张表 15 个字段, 每个字段 20 个字母。19*15*20=5700 字母。 半天 4 小时算 4*60*60=14400 秒。

    14400/5700=2.5 秒/字母。
    lujiaxing
        32
    lujiaxing  
       2024-04-23 22:49:42 +08:00
    @jones2000 我勒个去, 你每个字段都是 Name 对吧? 20 个字母顶多写完 public string Name. 后面还有 { get; set; } 呢? 然后还要打个回车呢?
    而且你定义成员都不写注释的是吧? 来回切输入法打中文英文或者来回切换数据库工具跟 IDE 在其之间复制粘贴的时间你算没算一下? 就算不写注释, 只把 get;set; 写完, 每个字段都是四个字母, 19 张表 也有 8550 字了. 你打字速度挺快啊.
    jones2000
        33
    jones2000  
       2024-04-24 00:41:55 +08:00
    @lujiaxing get, set string 这些不都是自动补全嘛, 注释直接头上一个段 sql 的建表语句,表里的字段说明直接就在里面了。你就拷贝下字段名。 要什么切换中英文。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     956 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:23 PVG 03:23 LAX 12:23 JFK 15:23
    Do have faith in what you're doing.
    ubao 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