从微软官网可以看到EFcore其实是一个.net的框架,主要为了方便开发人员做数据库交互的,可以让开发人员不写sql语句(因为框架层自己会转换成对应的sql到对应数据库中执行)。而EFCore是一个通用的框架层,访问的目标数据库可能是不同厂家的数据库,所以涉及到类似“方言包”的东西,就是各个数据库厂商提供的EFCore驱动。
达梦家目录driver/.net目录下有多个文件夹,我们重点关注DmProvider和EFCore.Dm。DmProvider是用于.NET环境连接达梦数据库的驱动程序,是.net程序连接达梦数据库的基础驱动。
EFCore.Dm是适配不同EntityFrameworkCore框架版本的适配程序,后面的版本数字要跟EFCore版本相匹配。
使用VS2022选装c#语言。
对于EFCore6框架程序,我们在VS工程中鼠标右键-》依赖项-》管理NuGet程序包
搜索栏中搜索安装Microsoft.EntityFrameworkCore6和Microsoft.EntityFrameworkCore.Relational6,注意版本号。
在依赖项中-》浏览-》选择本地对应EFcore版本的的达梦DmProvider.dll和DM.Microsoft.EntityFrameworkCore.dll
添加完成后就可以看到如下,此时就可以进行EFCore框架编程连接访问达梦数据库了。
其他EFCore版本操作方法类似,不再赘述。
一个简单的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");
}
}
文章
阅读量
获赞