1.首先我们创建一个控制台项目(文章使用的是.NET 6.0框架)
2.在控制台项目中添加一个实体类
public class Student
{
public int Id { get; set; } //主键
public string Name { get; set; } //姓名
public int Age { get; set; } //年龄
public bool Gender { get; set; } //性别
}
3.给项目安装NuGet包 Microsoft.EntityFrameworkCore.SqlServer (安装NuGet包还有另外一种方式,这里我只展示了在程序包控制台安装方法)
Install-Package Microsoft.EntityFrameworkCore.SqlServer
不需要加版本号,因为在程序包管理控制台,会自动匹配适合此项目的版本
4.创建一个继承DbContext类的TestContext类(类名可以随便取,只需要符合命名规则就行)
public class TestContext:DbContext
{
//Student类的数据集,方便在后面使用LINQ语句对数据操作时使用
public DbSet<Student> Students { get; set; }
/// <summary>
/// 此方法用于对程序要连接的数据库进行配置
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//数据库连接字符串
string connStr = "Data Source=localhost;Initial Catalog=Test6;Integrated Security=True;Encrypt=true;TrustServerCertificate=true;";
//使用SqlServer数据库
optionsBuilder.UseSqlServer(connStr);
base.OnConfiguring(optionsBuilder);
}
/// <summary>
/// 配置标识框架所需的架构
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//表示这个实体类对应数据库中名字为T_Students
modelBuilder.Entity<Student>().ToTable("T_Students");
base.OnModelCreating(modelBuilder);
}
}
这里没有配置Student类中的属性,所以会默认使用EF的默认配置
5.将实体类映射到数据库(方法一般有两种,这里我使用数据库迁移的方式)
(1) 在【程序包管理器控制台】安装Microsoft.EntityFrameworkCore.Tools包(Install-Package Microsoft.EntityFrameworkCore.Tools)
(2)安装好上述的包后继续在【程序包管理器控制台】执行如下命令:Add-Migration InitalDB,如果命令执行成功,将会输出如下内容,并且项目中会多一个Migrations文件夹
(3)然后继续在【程序包管理器控制台】执行如下命令:Update-database,如果命令执行成功则会显示如下内容
这个时候我们就可以去SQLServer查看是否存在对应的数据库和表了
6.插入数据,在项目主函数中书写代码
static void Main(string[] args)
{
//实例化上下文
using TestContext Ctx=new TestContext();
//实例化Student对象
var student1 = new Student() { Name = "张三", Age = 18, Gender = true };
var student2 = new Student() { Name = "李四", Age = 20, Gender = false };
var student3 = new Student() { Name = "王五", Age = 21, Gender = true };
var student4 = new Student() { Name = "钱六", Age = 25, Gender = false };
//让上下文跟踪实体对象,状态为添加状态
Ctx.Students.Add(student1);
Ctx.Students.Add(student2);
Ctx.Students.Add(student3);
Ctx.Students.Add(student4);
//保存到数据库
Ctx.SaveChanges();
Console.WriteLine("插入成功");
Console.ReadKey();
}
7.查询数据
static void Main(string[] args)
{
//实例化上下文
using TestContext Ctx=new TestContext();
//查询所有的学生
var query = from o in Ctx.Students
select o;
Console.WriteLine("==========所有学生==========");
foreach (var s in query)
{
string str = "";
if (s.Gender == true)
str = "男";
else
str = "女";
Console.WriteLine($"{s.Id},{s.Name},{s.Age},{str}");
}
//查询年龄大于20岁的学生
var queryage = from o in Ctx.Students
where o.Age > 20
select o;
Console.WriteLine("==========年龄>20岁的学生==========");
foreach (var s in query)
{
string str = "";
if (s.Gender == true)
str = "男";
else
str = "女";
Console.WriteLine($"{s.Id},{s.Name},{s.Age},{str}");
}
Console.ReadKey();
}
8.修改数据
static void Main(string[] args)
{
//实例化上下文
using TestContext Ctx=new TestContext();
//更新数据
var query=Ctx.Students.Where(s => s.Id== 1).FirstOrDefault();
query.Age = 30;
query.Name="Test";
Ctx.Update(query);
Ctx.SaveChanges();
Console.WriteLine("修改成功");
Console.ReadKey();
}
9.删除数据
static void Main(string[] args)
{
//实例化上下文
using TestContext Ctx=new TestContext();
//删除数据
var query=Ctx.Students.Where(s => s.Id== 1).FirstOrDefault();
Ctx.Remove(query);
Ctx.SaveChanges();
Console.WriteLine("删除成功");
Console.ReadKey();
}