修改VB模型文件后如何让Visual Studio更新SQL Server表结构
Entity Framework Code First 模型变更同步数据库操作方法
你当前使用的是EF Code First工作流,修改实体属性为可空类型后,通过Code First Migrations功能即可在Visual Studio中完成表结构同步,具体操作步骤如下:
场景说明
你现有Orders.vb初始代码如下:
Imports System.Data.Entity Imports DbContext Public Class Order Public Property id As Guid Public Property storeNumber As Integer End Class Public Class OrderDBContext Inherits DbContext Public Property Orders() As DbSet(Of Order) End Class
本次修改为将storeNumber属性从不可空Integer改为可空Integer?,需要同步修改SQL Server中对应表的字段非空约束。
详细操作步骤
- 打开Visual Studio,在顶部菜单栏依次选择「视图」→「其他窗口」→「包管理器控制台」,调出迁移命令执行窗口
- 如果你的项目从未启用过Code First迁移,先在包管理器控制台中执行以下命令:
执行完成后项目根目录会自动生成Enable-Migrations -ContextTypeName OrderDBContextMigrations文件夹,存储迁移配置和模型快照记录。如果之前已经启用过迁移,跳过这一步即可。 - 执行以下命令生成本次结构变更的迁移文件:
命令后半段的Add-Migration AlterStoreNumberToNullableAlterStoreNumberToNullable是本次迁移的自定义名称,你可以替换为任意方便识别变更内容的名字。EF会自动对比当前模型和上一次记录的模型快照,生成对应的表结构修改代码。建议:生成迁移文件后,打开
Migrations文件夹下最新生成的带时间戳前缀的VB文件,核对生成的变更逻辑是否仅为修改storeNumber字段为可空,避免误生成其他无关变更。 - 确认包管理器控制台顶部的「默认项目」下拉选项选中
Orders.vb所在的项目,且项目配置文件中的数据库连接字符串指向你要更新的目标SQL Server数据库后,执行以下命令应用变更:
命令执行完成后,对应SQL Server中的Update-DatabaseOrders表storeNumber字段就会被修改为允许空值,结构和模型完全一致。
注意事项
- 如果是首次对已存在的数据库启用迁移,执行
Enable-Migrations时可以追加-Force参数,避免因现有模型和数据库已匹配导致的启用失败。 - 如果需要更新生产环境数据库,不要直接连接生产库执行
Update-Database,建议执行Update-Database -Script命令生成对应SQL变更脚本,在生产环境手动执行脚本,降低操作风险。 - 本次是从非空字段改为可空字段,不会受存量数据影响;如果后续做反向操作(可空改非空),需要先把存量数据中该字段的NULL值全部处理为有效值,再执行迁移,否则会因为约束冲突更新失败。
内容的提问来源于stack exchange,提问作者iateadonut
相关产品推荐
相关产品推荐

