注册
EFCore配置连接DM8数据库
培训园地/ 文章详情 /

EFCore配置连接DM8数据库

陈宁 2022/11/03 1939 0 0

经过DCA的培训学习之后对达梦数据库的安装部署,基础知识和常用的操作已经了然于胸。那么作为一名.Net开发人员,我迫不及待想研究一下用目前比较流行的EFCore如何配置连接DM8数据库。

驱动安装
为了能够连接数据库,我们首先要使用NuGet包管理工具,安装Entity Framework Core相关的包,这三个包没有什么版本的要求,只要保持三个版本一致即可,我在这里选择了EFCore3.1版本:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
安装完以上包后,接下来就需要安装EF Core的达梦数据库驱动,这里注意一下,达梦DM8数据库基于Entity Framework Core 3.1 的驱动在NuGet官方源上并没有正式发布。这个时候我们可以从DM8安装目录drivers/dotNet下找到达梦官方提供的各个.Net版本所对应的驱动程序。这里我们根据EFCore的版本选择EFCore.Dm3.1这个文件夹下的dll。
image.png
找到驱动之后,需要对NuGet包管理器的程序包源进行添加设置,将达梦数据库安装源中的EFCore.Dm3.1 + DmProvider这两个驱动作为包源引入,然后再安装。
在NuGet包管理器中,点击右上角(红框框起来的齿轮图标)。
弹出选项窗口,点击窗口右上角的加号图标,名称输入EFCore.Dm3.1,源路径:drivers\dotNet\EFCore.Dm3.1。
将DmProvider包源用一样的方法引入,源路径:drivers\dotNet\DmProvider。

两个Nuget程序包源安装完成后,退回NuGet包浏览列表页面,然后选择程序包源EFCore.Dm3.1,在浏览面板中会显示达梦的EntityFramework Core的驱动包,选择它直接点击“安装”即可。
image.png
最后,选择程序包源DmProvider,在浏览面板中安装达梦的DmProvider的驱动包。
这里我遇到了一个问题,就是在NuGet包源上可以搜索到DmProvider 2.0版本的包,而且版本高于我们当前的本地版本,但是我试用了一下这个包并不能正常连接DM8数据库。仔细看了下这个包,原来是基于.NetFramework版本的,于2017年9月7日发布,不适用于Core版本。
开发的小伙伴们可以根据自己的项目需求,选择最适合自己的驱动,不过我还是推荐使用官方安装目录下的驱动程序,达梦官方的文档和下载还是更新的比较快的,NuGet可能更新的没有那么及时。
image.png

添加数据库上下文
当我们配置好驱动之后,接下来在项目中添加DbContext目录,在目录中添加一个名为DmContext.cs的类作为达梦数据库上下文,具体代码如下:

    /// <summary>
    /// 达梦数据库上下文
    /// </summary>
    public class DmContext : Microsoft.EntityFrameworkCore.DbContext
    {
        /// <summary>
        /// 用户
        /// </summary>
        public DbSet<User> Users { get; set; }

        public DmContext(DbContextOptions<DmContext> options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<User>().ToTable("sys_user");
        }
    }

DmContext继承了Microsoft.EntityFrameworkCore.DbContext,添加用户User的DbSet,重载OnModelCreating方法,将用户User模型与达梦数据库的SYS_USER表建立映射关系,如果不指定映射关系,默认将映射成Users数据表。

添加数据库连接字符串
打开项目中的appsettings.json文件,配置数据库连接字符串,如下所示:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DmExample": "Server=localhost;Database=DmExampleDB;User=SYSDBA;Password=111111;"
  }
}

这一步是在appsettings.json配置文件里增加了一个ConnectionStrings的配置项,这个配置项用来设置数据库连接字符串。连接字符串名称是DmExample,这个字符串配置的风格是和SQLServer非常像的,Server表示数据库地址、Database表示数据库名称、User和Password就更好理解了,是连接数据库账号和密码。
但是达梦数据库连接字符串不支持Server=.来表示本地地址,需要替换成localhost或者127.0.0.1都行。

注册数据库上下文
配置好数据库连接字符串后,只要在Starup.cs类中注册当前的数据库上下文,在 .NetCore框架中,微软已经提供现成的上下文注册的中间件,只要调用它就可以了,具体代码如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    // 注册DbContext
    services.AddDbContext<DmContext>(options =>
	options.UseDm(Configuration.GetConnectionString("DmExample")));
}

其中,DmContext是咱们创建的达梦数据库上下文,DmExample是我们在appsettings.json配置文件中添加的数据库连接字符串,通过Configuration.GetConnectionString方法获取该数据库连接字符串。
解释一下options.UseDm,使用不同的数据库需要对应的数据库驱动,UseDm就是由达梦数据库驱动提供的方法,我们连接SqlServer数据库的时候是使用options.UseSqlServer,如果我们以后连接MySql数据库时是使用options.UseMySQL,至此数据库的连接我们已配置完成。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服