注册
EFcore不同版本框架连接达梦数据库
专栏/滴水藏海/ 文章详情 /

EFcore不同版本框架连接达梦数据库

yuao 2024/12/31 410 0 0
摘要 eco似乎还没有EFcore访问达梦的示例,抛砖引玉一下,举例说明不同的EFcore框架连接达梦数据库的方法,

1.先说个废话,啥是EFcore

image.png
    从微软官网可以看到EFcore其实是一个.net的框架,主要为了方便开发人员做数据库交互的,可以让开发人员不写sql语句(因为框架层自己会转换成对应的sql到对应数据库中执行)。而EFCore是一个通用的框架层,访问的目标数据库可能是不同厂家的数据库,所以涉及到类似“方言包”的东西,就是各个数据库厂商提供的EFCore驱动。

2.达梦提供的EFcore驱动

    达梦家目录driver/.net目录下有多个文件夹,我们重点关注DmProvider和EFCore.Dm。DmProvider是用于.NET环境连接达梦数据库的驱动程序,是.net程序连接达梦数据库的基础驱动。
    EFCore.Dm是适配不同EntityFrameworkCore框架版本的适配程序,后面的版本数字要跟EFCore版本相匹配。
image.png

3.举例说明VS使用EFcore6的方法:

    使用VS2022选装c#语言。
    对于EFCore6框架程序,我们在VS工程中鼠标右键-》依赖项-》管理NuGet程序包
image.png
    搜索栏中搜索安装Microsoft.EntityFrameworkCore6和Microsoft.EntityFrameworkCore.Relational6,注意版本号。
image.png
    在依赖项中-》浏览-》选择本地对应EFcore版本的的达梦DmProvider.dll和DM.Microsoft.EntityFrameworkCore.dll
image.png
image.png
image.png
    添加完成后就可以看到如下,此时就可以进行EFCore框架编程连接访问达梦数据库了。
    其他EFCore版本操作方法类似,不再赘述。
image.png

4.搞个例子试一下:

    一个简单的customer实体,然后插入两条记录,简单带条件查询一下输出。

using System.Collections.Generic;
using System.Reflection.Emit;
using Dm;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace EFcore7;

public class CustomerContext : DbContext
{
    public CustomerContext(DbContextOptions options) : base(options)
    { }
    public DbSet<Customer> Customers { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>(b =>
        {
            b.HasKey(c => c.Id);
            b.HasKey(c => c.IsDeleted);
            b.ToTable("Customers");

        });
    }
}
public class Customer
{
    public string Id { get; set; }
    public bool IsDeleted { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        try
        {
            var options = new DbContextOptionsBuilder()
            .UseDm("SERVER=localhost;PORT=5236;USER=SYSDBA;PASSWORD=xx密码")
            .UseInternalServiceProvider(
            new ServiceCollection()
            .AddEntityFrameworkDm()
            .BuildServiceProvider())
            .Options;
            using (var context = new CustomerContext(options))
            {
                context.Database.EnsureCreated();
                var cus1 = new Customer { Id = "abc", IsDeleted = false };
                var cus2 = new Customer { Id = "qqq", IsDeleted = true };
                context.Customers.AddRange(cus1, cus2);
                context.SaveChanges();
                var results = context.Customers.AsNoTracking().Where(c => c.IsDeleted == false)
                .OrderByDescending(c => c.Id).ToList();
                Console.WriteLine(results[0].Id);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("异常: " + e.Message);
        }
        Console.WriteLine("test over");
    }
}

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服