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

    整个的配置就完成了

  • 相关阅读:
    c语言I博客作业02
    C语言I博客作业03
    学习Java的第一步
    电脑快捷键使用方法
    《对生活的勇气》叔本华
    小学四则运算题目的程序
    Java基础教程0测试人员为什么要掌握Java基础
    maven 环境配置
    作业六:团队项目——编写项目的Spec
    作业五:团队项目——项目启动及需求分析
  • 原文地址:https://www.cnblogs.com/moonstars/p/15264821.html
Copyright © 2020-2023  润新知