修改MS SQL数据库表后如何更新ASP.NET Core 3.1的EF Core模型类
EF Core 3.1 数据库新增字段后更新模型操作指南
你当前使用的是Database First开发模式,修改数据库结构后更新模型有两种可行方案,可根据修改复杂度选择:
方案1:手动更新(仅单表新增单列场景优先选择)
操作最快捷,不会覆盖你之前对模型的自定义修改:
- 找到项目中对应表的模型类,新增和数据库字段匹配的属性,确保属性类型、可空性和SQL Server中新增列的定义完全一致。
示例:你新增了nvarchar(100) NULL的Remark列,对应属性代码为:public string? Remark { get; set; } - 如果你有单独的FluentAPI配置(比如在
OnModelCreating方法或IEntityTypeConfiguration实现类中),补充该列对应的长度、默认值、约束等配置即可。 - 修改完成后直接编译项目即可正常使用。
方案2:脚手架重生成(多表/多字段修改场景优先选择)
如果修改内容较多,直接用EF Core提供的脚手架命令全量同步数据库结构:
前置准备
- 打开Visual Studio的包管理器控制台(PMC),或者系统终端(需先cd到项目
.csproj文件所在目录) - 若未安装对应版本的EF Core工具,先执行安装命令:
终端安装全局工具命令:
包管理器控制台安装命令:dotnet tool install --global dotnet-ef --version 3.1.8Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.1.8
执行脚手架同步命令
命令中需添加强制覆盖参数,才能更新已有的模型和上下文文件:
- 终端命令示例(替换对应参数为你项目的实际配置):
dotnet ef dbcontext scaffold "你的SQL Server连接字符串" Microsoft.EntityFrameworkCore.SqlServer -o 模型存放目录路径 -c 你的DbContext类名 --force - 包管理器控制台命令示例:
Scaffold-DbContext "你的SQL Server连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir 模型存放目录路径 -Context 你的DbContext类名 -Force - 参数说明:
-o/OutputDir:你项目中现有模型类存放的文件夹路径,比如Models-c/Context:你项目中现有数据库上下文类的名称--force/-Force:强制覆盖现有文件,必须添加该参数才会同步修改旧文件
注意:如果你之前手动修改过自动生成的模型类、上下文类内容,执行强制覆盖参数会把你的自定义修改全部覆盖,这种情况建议优先选择手动更新方案,或者将自定义逻辑放到单独的partial类中避免被覆盖。
内容的提问来源于stack exchange,提问作者vinn23
相关产品推荐
相关产品推荐

