.net Core 基于EF Core 实现数据库上下文

在做项目时,需要将某一些功能的实体建立在另一个数据库中,连接不同的数据库用以存储记录。通过查找资料,实现EF Core上下文。
下面是实现上下文后的解决方案的目录:

.net Core 基于EF Core 实现数据库上下文

1.UpAndDownDbContext

.net Core 基于EF Core 实现数据库上下文

2.UpAndDownDbContextConfigurer

.net Core 基于EF Core 实现数据库上下文

3.UpAndDownDbContextFactory

.net Core 基于EF Core 实现数据库上下文

以上三个文件为第二个数据库的相关迁移和配置 4.新增MyConnectionStringResolver,根据不同的类型查找不同的数据库连接串

.net Core 基于EF Core 实现数据库上下文

5.在MyTestProjectEntityFrameworkModule文件中新增部分代码,将MyConnectionStringResolver注入到Module中 namespace MyTestProject.EntityFrameworkCore { [DependsOn( typeof(MyTestProjectCoreModule), typeof(AbpZeroCoreEntityFrameworkCoreModule))] public class MyTestProjectEntityFrameworkModule : AbpModule { /* Used it tests to skip dbcontext registration, in order to use in-memory database of EF Core */ public bool SkipDbContextRegistration { get; set; } public bool SkipDbSeed { get; set; } public override void PreInitialize() { #region 新增将计注入 Configuration.ReplaceService(typeof(IConnectionStringResolver), () => { IocManager.IocContainer.Register( Component.For<IConnectionStringResolver>() .ImplementedBy<MyConnectionStringResolver>() .LifestyleTransient() ); }); #endregion if (!SkipDbContextRegistration) { Configuration.Modules.AbpEfCore().AddDbContext<MyTestProjectDbContext>(options => { if (options.ExistingConnection != null) { MyTestProjectDbContextConfigurer.Configure(options.DbContextOptions, options.ExistingConnection); } else { MyTestProjectDbContextConfigurer.Configure(options.DbContextOptions, options.ConnectionString); } }); } #region 注入 // Configure workflow DbContext Configuration.Modules.AbpEfCore().AddDbContext<UpAndDownDbContext>(options => { if (options.ExistingConnection != null) { UpAndDownDbContextConfigurer.Configure(options.DbContextOptions, options.ExistingConnection); } else { UpAndDownDbContextConfigurer.Configure(options.DbContextOptions, options.ConnectionString); } }); #endregion ////Dapper //DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.MySqlDialect(); } public override void Initialize() { IocManager.RegisterAssemblyByConvention(typeof(MyTestProjectEntityFrameworkModule).GetAssembly()); } //public override void PostInitialize() //{ // if (!SkipDbSeed) // { // SeedHelper.SeedHostDb(IocManager); // } //} } } 6.在appsettings.json设置另一个数据库的连接串

.net Core 基于EF Core 实现数据库上下文

7.在MyTestProjectConsts和SCMConsts中分别建立常量

.net Core 基于EF Core 实现数据库上下文

.net Core 基于EF Core 实现数据库上下文

以上就是实现数据库上下文的所有的相关配置过程。 最后测试一波 执行数据库迁移 ,由于配置了上下文所以在迁移时要指定DbContext:Add-Migration (迁移名称) -c UpAndDownDbContext(或MyTestProjectDbContext)。

若是不指定DbContext则会出现错误:More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for PowerShell commands and the '--context' parameter for dotnet commands.

整个的配置就完成了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfzfj.html