昨天晚上看了EF Core,EFCore(Entity Framework Core)是一个轻量级别的ORM框架,它可扩展性强、跨平台、使用简单,用于使用一种简单的、一致性的方式来访问关系型的数据库。
一、建立项目
建立普通的项目即可,我使用的是控制台程序。
二、加载依赖
点击菜单栏中的【项目】->【管理NuGet程序包(N)...】,在浏览中查找“Microsoft.EntityFrameworkCore.SqlServer”,选择版本,然后安装即可。
三、编写代码
⑴建立实体对象
要操作数据库中的某个表,需要先建立对应的类,比如,我想操作数据库中的表computerAssetsInfo,它有28个字段,C01为主键,我仅仅使用其中的三个字段,如下定义:
public class computerAssetsInfo
{
public int C01{set; get; }
public string? C02 { set; get; }
public string? C04 { set; get; }
public override string ToString()
{
return $"C01:{C01},C02:{C02},C04:{C04}";
}
}
⑵继承DbContext并重写
public class MyDbContext : DbContext
{
public DbSet ComputerAssetsInfo { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer("Data Source=IP地址;Initial Catalog=数据库名称;User ID=用户名称;Password=用户密码;Encrypt=True;Trusted_Connection=True;TrustServerCertificate=True;Integrated Security=false;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity();
modelBuilder.Entity().HasKey(c => c.C01);
}
}
⑶应用EF Core提供的方式来操作数据表
●增加数据记录
static async Task MyAdd()
{
using (var context = new MyDbContext())
{
context.Add(new computerAssetsInfo { C02="YQCY-01-02-0000",C04 = "这是第0条数据" });
await context.SaveChangesAsync();
}
}
●修改数据记录
static async Task MyUpdate()
{
using (var context = new MyDbContext()) {
var data =await context.ComputerAssetsInfo.FirstOrDefaultAsync(x => x.C02 == "YQCY-01-02-0000");
data.C04="这是修改后的数据";
await context.SaveChangesAsync();
}
}
●删除数据记录
static async Task MyDel()
{
using (var context = new MyDbContext()) {
var data =await context.ComputerAssetsInfo.FirstOrDefaultAsync(x => x.C02 == "YQCY-01-02-0000");
context.Remove(data);
await context.SaveChangesAsync();
}
}
●查询数据记录
static async Task MyQuery()
{
using (var context = new MyDbContext())
{
var records = await context.ComputerAssetsInfo.ToListAsync();
records.ForEach(Console.WriteLine);
}
}
●主程序调用
using Microsoft.EntityFrameworkCore;
using System.Security.Cryptography.X509Certificates;
namespace EFCore6
{
public class program
{
static async Task Main(params string[] args)
{
await MyDel();
await MyQuery();
await MyUpdate();
await MyQuery();
await MyDel();
await MyQuery();
}
//......
}
}
四、出现的问题及解决办法
⑴ 提示缺少主键
解决办法:重写方法设置表的主键信息:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity();
modelBuilder.Entity().HasKey(c => c.C01);
}
⑵提示“证书链是由不受信任的颁发机构颁发的”
解决办法:在数据库连接信息中加入“TrustServerCertificate=True;Integrated Security=false;”
虽然说EF Core上手容易,编写代码简单,但是要挖掘它的强大和灵活还是要费功夫的。
学习文档地址:实体框架文档