如何使用ABP框架对接现有SQL Server数据库 无需依赖Abp Suite工具
ABP框架适配现有SQL Server数据库方案(无需依赖Abp Suite)
核心适配逻辑基于EF Core原生的Database First能力实现,全程不需要依赖第三方工具,可直接适配存量SQL Server数据库:
- 安装必要依赖包
在项目的.EntityFrameworkCore层安装与你项目EF Core版本匹配的Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools两个NuGet包。 - 执行数据库逆向工程命令
打开Visual Studio的包管理器控制台,将默认项目切换为.EntityFrameworkCore层,执行如下命令:
如果你只需要生成指定业务表的实体,可以额外追加参数Scaffold-DbContext "你的SQL Server数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities -ContextDir . -Context 你的项目名DbContext -NoOnConfiguring -NoPluralize-Tables 表名1,表名2,避免重复生成ABP内置的系统表。
注意:执行命令前请先备份你现有的DbContext文件,避免原有自定义配置被覆盖 - 适配ABP实体规范
给生成的业务实体补充ABP约定的接口实现:- 实体基础主键继承
IEntity<主键类型>,比如主键为int的实体继承IEntity<int> - 包含创建时间、创建人字段的实体继承
ICreationAuditedObject - 包含修改时间、修改人字段的实体继承
IUpdateAuditedObject - 包含软删除标记字段的实体继承
ISoftDelete
ABP内置的系统表不需要额外修改,框架已经自带了对应实体实现。
- 实体基础主键继承
- 调整DbContext配置
将生成的DbContext的父类从默认的DbContext改为ABP提供的AbpDbContext<你的项目名DbContext>,再删除OnModelCreating方法中所有和ABP系统表相关的映射配置,仅保留自定义业务表的映射逻辑即可。 - 关闭迁移检查(可选)
如果你完全不需要使用Code First模式迁移修改数据库结构,可以直接删除项目中的Migrations文件夹,同时在模块类的ConfigureServices方法中添加如下配置,指定迁移表的位置避免冲突:Configure<AbpDbContextOptions>(options => { options.Configure(ctx => { var sqlServerOpt = ctx.ExistingConnection != null ? ctx.DbContextOptions.UseSqlServer(ctx.ExistingConnection, b => b.MigrationsHistoryTable("__EFMigrationsHistory", "你的数据库Schema名")) : ctx.DbContextOptions.UseSqlServer(ctx.ConnectionString, b => b.MigrationsHistoryTable("__EFMigrationsHistory", "你的数据库Schema名")); }); });
完成以上步骤后即可正常在ABP项目中使用原有数据库的业务表,兼容ABP框架的仓储、审计等所有原生能力。
内容的提问来源于stack exchange,提问作者Omer Faruk KAYA
相关产品推荐
相关产品推荐

