1
Mithril 2021-05-16 14:50:49 +08:00
所有数据库都是这么处理的吧?每次变更生成 Migration 。
|
2
xuanbg 2021-05-16 14:59:34 +08:00
好久没用 EF 了……我记得 EF 有三种设计模式:Code-First 、Model-First 、Database-First 。貌似只要不是 Database-First,就可以自动修改数据库表结构的。
|
3
longkas239 OP 官方 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 查询的优势。 数据量不大可以考虑。 |
4
alinwu05 2021-05-16 16:58:41 +08:00
因为生成的脚本可以和代码一个签入,这样其他人拉取你的代码后,也可以用脚本同步数据库。
|
5
forgottencoast 2021-05-16 17:07:48 +08:00
生成新的脚本以后,启动客户端之前执行脚本即可。
所有的数据库程序都会有这个问题,要么 DBA 手工执行,要么就是部署程序执行。 新启动的客户端在创建数据库时,可以用合并过的脚本,这样只会有一个脚本创建数据库。 |
6
netnr 2021-05-17 08:47:56 +08:00 via Android
更新表后重新生成实体类,业务实体用 ViewModel
|
7
flytsuki 2021-05-17 09:49:33 +08:00
我以前用 Code-First 模式开发,只需写代码就行了。后面场景复杂了就躺平了,修改完数据库手动修改实体
|
8
Oktfolio 2021-05-17 12:55:02 +08:00
|
9
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() |
10
ggabc 2021-05-17 22:24:31 +08:00
数据库这种需要稳定的底层结构,当然是每次添加了手动去执行脚本补充字段
|