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

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

1.UpAndDownDbContext

2.UpAndDownDbContextConfigurer

3.UpAndDownDbContextFactory

以上三个文件为第二个数据库的相关迁移和配置

4.新增MyConnectionStringResolver,根据不同的类型查找不同的数据库连接串

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设置另一个数据库的连接串

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

以上就是实现数据库上下文的所有的相关配置过程。

最后测试一波

执行数据库迁移 ,由于配置了上下文所以在迁移时要指定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.

整个的配置就完成了

posted @ 2021-09-16 10:54  悟自省  阅读(482)  评论(0编辑  收藏  举报