.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.

整个的配置就完成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值