abp vnext连接dm达梦数据库。.net core连接dm达梦数据库。ef core连接dm达梦数据库 电脑版发表于:2023/2/25 19:48 突然有一天客户说把数据库换成国产的dm达梦数据库,网上搜了一下这数据库的资料太少了,还是要自己摸索!国产数据库还需要时间沉淀。 <img src="https://img.tnblog.net/arcimg/aojiancc2/476a37b5770540b392621857a e9d398b.jpg" width="100px"> 当然要先安装dm数据库,这块就不说了,注意一下里边的用户,模式这些等待,和oracle比较像,用户、模式这些没有搞好,你连表都查询不了。`迁移之后如果有问题要特别注意达梦数据库里边的配置` ### 一:下载库 直接搜索: ![](https://img.tnblog.net/arcimg/aojiancc2/794cdd5935e94625a762633749567cfb.png) 或者使用命令下载 ``` <PackageReference Include="EFCore.Dm" Version="5.0.1" /> ``` 还好官方现在把ef驱动上传到了nuget上面,以前是只有安装数据库的时候找驱动 ### 二:在基础设施层中的orm框架ef的模块中配置好使用dm数据库 直接在Configure去配置UseDm是不行的,因为现在abp官方还没有支持对dm数据库的支持,所以还没有Volo.Abp.EntityFrameworkCore.DM这种扩展库。 ``` Configure<AbpDbContextOptions>(options => { options.UseSqlServer(); }); ``` 我们使用非封装的配置方法去集成其他DMBS行了,比如这里的DM数据库 ``` Configure<AbpDbContextOptions>(opt => { opt.Configure(ex => { ex.DbContextOptions.UseDm(ex.ConnectionString); // opts.UseSqlServer(); // opts.UseMySQL(); }); //opt.UseSqlServer(); //opt.UseMySQL(); }); ``` 还可以检查当前请求中是否存在到相同数据库的现有(活动)连接,并在可能的情况下重用它. 这允许在不同的DbContext类型之间共享单个事务. ABP处理其余的事情. 如果没有活动的连接,它将把 ctx.ConnectionString 传递给UseDm(这将创建新的数据库连接) ``` Configure<AbpDbContextOptions>(options => { options.Configure(ctx => { if (ctx.ExistingConnection != null) { ctx.DbContextOptions.UseDm(ctx.ExistingConnection); } else { ctx.DbContextOptions.UseDm(ctx.ConnectionString); } }); }); ``` ### 三:数据库迁移 只在模块类中修改了,数据库还没有迁移过去。我们需要重写一下IDesignTimeDbContextFactory让我们数据库迁移到dm数据库去。 ``` namespace WY.JBLand.EntityFrameworkCore { /* This class is needed for EF Core console commands * (like Add-Migration and Update-Database commands) */ public class WyJBLandDbContextFactory : IDesignTimeDbContextFactory<WyJBLandDbContext> { public WyJBLandDbContext CreateDbContext(string[] args) { //BookStoreEfCoreEntityExtensionMappings.Configure(); var configuration = BuildConfiguration(); //方法1: string conn = configuration.GetConnectionString("conn_mysql"); //方法2: //string conn_mysql = configuration["ConnectionStrings:conn_mysql"]; //AddTestLog(conn); //var builder = new DbContextOptionsBuilder<WyJBLandDbContext>() // .UseMySql(conn, ServerVersion.AutoDetect(conn)); var builder = new DbContextOptionsBuilder<WyJBLandDbContext>() .UseDm(conn); return new WyJBLandDbContext(builder.Options); } private static IConfigurationRoot BuildConfiguration() { var builder = new ConfigurationBuilder() .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../WY.JBLand.API/")) .AddJsonFile("appsettings.json", optional: true); return builder.Build(); } } } ``` 具体参考:abp vnext连接mysql https://www.tnblog.net/aojiancc2/article/details/7311 **然后在把连接字符串配置一下,配置成dm数据库的。然后把以前使用mysql数据库下的迁移记录全部都干掉,在执行迁移命令 ** 执行迁移命令: ``` Add-Migration 迁移记录名称 ``` 更新到数据库 ``` Update-Database ``` 成功后你就可以在dm数据库里边看到所有项目中用到的表了。ef迁移命令详解参考: https://www.tnblog.net/aojiancc2/article/details/5370