.net 的 entity framework 里实体新加字段如何让数据库自动同步

2021-05-16 13:30:53 +08:00
 longkas239
表里新加字段,实体代码改动后,如何让数据库保持一致。搜到资料是用命令在文件夹里生成迁移脚本,这样脚本岂不是越来越多。这个数据库只是在用户客户端用的,这办法太繁琐也容易出错。

在表结构只做增量更新的需求下,有解决办法吗,EnsureCreated 方法只能创建新的数据库和实体一致

如果是 nosql 数据库就不用关心这个问题了,不过调研之后没有发现稳定成熟的嵌入式数据库,仍然用的 sqlite
1565 次点击
所在节点    程序员
10 条回复
Mithril
2021-05-16 14:50:49 +08:00
所有数据库都是这么处理的吧?每次变更生成 Migration 。
xuanbg
2021-05-16 14:59:34 +08:00
好久没用 EF 了……我记得 EF 有三种设计模式:Code-First 、Model-First 、Database-First 。貌似只要不是 Database-First,就可以自动修改数据库表结构的。
longkas239
2021-05-16 16:45:47 +08:00
官方 Code-First migration 教程: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/migrations-and-deployment-with-the-entity-framework-in-an-asp-net-mvc-application

很复杂,目前想到的解决办法:
新建一个单表数据库作为代理,表里三个字段: 实体类名,实体对象 id,实体对象内容(json)。每次程序启动时,从库里读出所有实体对象,用 EnsureCreated 方法生成一个新的数据库进行操作, 程序关闭时将所有实体数据取出存入代理数据库。 结果就是用户数据实际上以 json 形式存在代理数据库,而生成的数据库用来在程序运行期间结构化数据,可以保留 sql 查询的优势。 数据量不大可以考虑。
alinwu05
2021-05-16 16:58:41 +08:00
因为生成的脚本可以和代码一个签入,这样其他人拉取你的代码后,也可以用脚本同步数据库。
forgottencoast
2021-05-16 17:07:48 +08:00
生成新的脚本以后,启动客户端之前执行脚本即可。
所有的数据库程序都会有这个问题,要么 DBA 手工执行,要么就是部署程序执行。
新启动的客户端在创建数据库时,可以用合并过的脚本,这样只会有一个脚本创建数据库。
netnr
2021-05-17 08:47:56 +08:00
更新表后重新生成实体类,业务实体用 ViewModel
flytsuki
2021-05-17 09:49:33 +08:00
我以前用 Code-First 模式开发,只需写代码就行了。后面场景复杂了就躺平了,修改完数据库手动修改实体
Oktfolio
2021-05-17 12:55:02 +08:00
he1a2s0
2021-05-17 15:02:32 +08:00
EF 太久没用记不清了。。程序里面应该包括改动后 Add-Migration 生成的 Migrations 类吧,那可以参考:
https://docs.microsoft.com/zh-cn/ef/ef6/modeling/code-first/migrations/#automatically-upgrading-on-application-startup-migratedatabasetolatestversion-initializer

如果是 EFCore 的话可以直接 dbContext.Database.Migrate()
ggabc
2021-05-17 22:24:31 +08:00
数据库这种需要稳定的底层结构,当然是每次添加了手动去执行脚本补充字段

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX