达梦数据库的简介就不写了,自己去官网搜索。
至于我为什么写这个教程,是因为工作中用到了,并且走了一些弯路。为了让大家少走弯路,就写个文章分享一下,反正也闲着无聊。
因工作中用到了abp vnext框架,且使用的ORM是EF Core使用的MySql数据库。
(abp vnext 默认就是支持efcore 的,所以切换达梦很顺利,就是有些字段类型,达梦兼容会出现一些问题)
abp 切换第三方的数据库传送地址:https://docs.abp.io/zh-Hans/abp/7.1/Entity-Framework-Core-Other-DBMS
当客户要求切换达梦数据库的时候,有点懵逼。这适配达梦数据库,网上也搜到的文章很少,一筹莫展之时,就去了达梦官网。https://eco.dameng.com/
嗯,官网文档很全。官网右上角也有下载按钮。
这里我下载的是Windows版本的安装包。
下载完,是一个zip压缩包。解压里面的文件。这个文件夹很全,数据库程序、可视化界面、迁移工具、各种编程语音对应的驱动程序等等都在里面。
解压开之后,找到dotnet的驱动和efcore包。
~dm8_20230106_x86_win_64\dm8_20230106_x86_win_64\source\drivers\dotNet
这个里面你找到对应的版本,就可以在代码里使用了。
使用起来也很麻烦,因为里面发布的dll、nuget包都是离线版本的,你也不能推送到nuget.org官网上去。因为【国产、安全】所以,一切的包工具都是离线版本。
此时你可以搭建一个私有的nuget管理服务,搭建教程微软文档有,别人写的也有。如果你是本地开发,可以使用另外一个快捷的办法。
打开你的 visual studio编辑器,找到你的nuget管理工具,点击右上角的设置图标。
添加一个私有的nuget包源头。
然后就可以在nuget上加载出你刚刚添加的nuget了。
添加完毕后,就可以按照ef core的方式创建的你的model、dbcontext了。
然后使用 code first 创建库表结构。
efcore的三件套,安装一下,版本和你创建的保持一致
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
创建一个user类
public class User
{
public string Id { get; set; }
///
/// 姓名
///
public string Name { get; set; }
///
/// 年龄
///
public int? Age { get; set; }
///
/// 性别
///
public bool? Gender { get; set; }
///
/// 创建日期
///
public DateTime? CreateTime { get; set; }
}
namespace DmExample.DbContext
{
///
/// 达梦数据库上下文
///
public class DmContext : Microsoft.EntityFrameworkCore.DbContext
{
///
/// 用户
///
public DbSet Users { get; set; }
public DmContext(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity().ToTable("user");
}
}
}
打开项目中的appsettings.json
配置文件:
{
//...
"ConnectionStrings": {
"DmExample": "Server=你的IP地址;Database=数据库名字;User=账号;Password=密码;"
}
}
注册数据库上下文
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// 注册DbContext
services.AddDbContext(options =>
options.UseDm(Configuration.GetConnectionString("DmExample")));
}
add-migration init1
更新数据库命令
update-database
此时去数据库里,看看库表已经生成了。
达梦官方的ef core是有点小bug的,不过整体是可以使用的。
所谓的bug是时间格式化,必须按照达梦的来定义,否则就会报错。
dm.exception "&*(**&&"
就是这样的问题,我也在达梦论坛提了问题,人家说解决了,咱验证了,还是没有解决,不过整体还是可以使用的。
问题传送门:https://eco.dameng.com/community/question/d52ced27800e61e2b67b6f77c265cb55
不过,大家遇到问题,就在达梦官方提问题,让他们解决,这样我们ef core适配达梦才会更加强大。
好了,今天的分享就到这里,感谢大家的阅读。