You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Database First模式下更新模型且保留原有自定义方法的实现方案

解决方案

方案1:使用*分部类(partial class)*拆分自定义逻辑(最推荐)

EF Core 脚手架默认生成的DbContext和实体类都是分部类,将自定义逻辑从自动生成的Tasks3Context.cs文件中剥离即可:

  • 新建独立类文件,可命名为Tasks3Context.Custom.cs
  • 在该文件中声明同名分部类,所有自定义的连接字符串切换逻辑、业务方法都写在这个文件中:
public partial class Tasks3Context : DbContext
{
    // 自定义方法写在该文件内,不会被脚手架命令覆盖
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            string connString = GetConnectionStringFromToken();
            optionsBuilder.UseSqlServer(connString);
        }
    }

    private string GetConnectionStringFromToken()
    {
        // 从token提取数据、处理后返回对应连接字符串的业务逻辑
    }
}

后续运行脚手架命令时,只会覆盖自动生成的上下文文件,你自行创建的自定义分部类不会被修改,所有自定义逻辑可以完整保留。

方案2:手动更新指定实体,不运行脚手架命令

如果只是小范围调整表结构(比如修改列名、新增/删除字段),可以直接手动修改对应内容,无需运行脚手架命令:

  • 找到Models\MainModel目录下的Patient.cs实体类,直接修改对应属性名,比如将CNIC5改为CNIC
  • 若使用Fluent API做映射,同步修改自动生成的Tasks3Context.cs中OnModelCreating方法里Patient实体的列映射配置即可;也可以直接给属性加[Column("CNIC")]特性实现映射,不需要修改自动生成的上下文代码。

方案3:脚手架命令新增参数避免覆盖上下文配置

EF Core 5.0及以上版本支持-NoOnConfiguring参数,添加该参数后运行脚手架命令不会生成、覆盖OnConfiguring方法的内容,命令示例如下:

Scaffold-DbContext "Server=.;Database=Tasks3;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models\MainModel -t Patient -f -NoOnConfiguring

内容的提问来源于stack exchange,提问作者Saqlain Mushtaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:09:04