EF全称EntityFramework,是orm(对象关系映射)框架。在.net平台中被广泛使用。ef在数据库与实体类中架起一座桥梁。减少了代码编写量,下面我将结合.net5进行demo的编写,实现一个简单的DBfirst写法。dbfirst是指数据库优先,先创建数据库后自动生成实体类,还有一种是corefirst是先创建实体类在生成数据库。
步骤一:我们在sql server数据库中创建一个名字为index的数据库,创建一个名字为student的表。
USE [index1]
GO
/****** Object: Table [dbo].[student] Script Date: 2021/7/21 23:27:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[student](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NULL,
[age] [varchar](50) NULL,
[grade] [varchar](50) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
步骤二:我们创建一个控制台应用。名字为demo7。在nuget包管理工具中添加三个包。
microsoft.entityFrameworkcore
entityFrameworkcore.sqlserver
entityFrameworkcore.tools
步骤三:点击工具-nuget包管理工具-程序包管理器控制台执行以下命令
Scaffold-DbContext "Data Source=.;Initial Catalog=index1;User ID=sa;Password=123456789" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entity -Force -Context DemoDbContext -ContextDir /
/*命令参数:
-outputdir 实体文件所存放的文件目录
-contextdir dbcontext文件存放的目录
-context dbcontext文件名
-schemas 需要生成实体数据的数据表所在的模式
-dataAnnotations
-useDatabaseNames 直接使用数据库中的表名和列名
-force 强制执行,重写已经存在的实体文件*/
执行完之后项目就会自动生成实体以及DBContext文件,里边包含了实体与数据库表的关联参数。
步骤四:在主程序中写方法测试关于数据库的增删改查操作
using System;
using demo7.Entity;
using System.Linq;
namespace demo7
{
class Program
{
static void Main(string[] args)
{
try
{
using (DemoDbContext context = new DemoDbContext())
{
//增加
context.Students.Add(new Student()
{
Name = "zhoaxi",
Age = "12",
Grade = "三年级"
});
context.SaveChanges();
}
using (DemoDbContext te = new DemoDbContext())
{
//查找
var user = from a in te.Students
orderby a.Id
select a;
foreach(var i in user)
{
Console.WriteLine("id="+i.Id+"\tname="+i.Name+"\tage="+i.Age);
}
Console.ReadKey();
//修改
string name = "123";
Student stu = te.Students.Where(a => a.Name == name).FirstOrDefault();
Console.WriteLine("name" + stu.Name + "\tage=" + stu.Age + "\tgrade=" + stu.Grade);
stu.Name = "李四";
stu.Grade = "高中";
stu.Age = "16";
te.SaveChanges();
Console.WriteLine("数据修改成功");
Console.ReadKey();
//删除
string oldname = "李四";
Student stud = te.Students.FirstOrDefault(c => c.Name == oldname);
te.Students.Attach(stud);//将student实例添加到ef容器中
te.Students.Remove(stud);
te.SaveChanges();
Console.WriteLine("删除完成");
Console.ReadKey();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
}
}
以上就是EF框架的基本操作。在java的角度看ef等同于jdbc。当然EF还有很多其他的操作,在这里不说。谨记学无止境。