EntityFramework-Core(EF Core),是数据库操作的首选ORM(对象关系映射)工具,它支持多种数据库,并提供了流畅的API和代码优先的开发方式。
EntityFramework-Core优势
代码优先:允许开发者使用C#代码定义数据库模型,EF Core会自动生成数据库表结构。
数据库迁移:支持数据库的版本控制,可以轻松地更新数据库结构。
查询和更新:提供LINQ查询API,可以使用C#语法进行数据库操作,同时支持异步操作,提高应用响应速度。
多数据库支持:可以与多种数据库(如SQL Server、MySQL、PostgreSQL等)无缝集成。
数据库操作的重要性
在Web应用中,数据库操作是核心功能之一,它涉及到数据的存储、检索、更新和删除。高效、安全的数据库操作对于提升应用性能、保证数据完整性至关重要。使用ORM工具如EF Core,可以简化这些操作,减少SQL语句的编写,同时提供更好的数据模型管理和事务处理能力。
创建数据库模型
使用EF Core,首先需要定义数据库模型。模型通常由实体类表示,实体类中的属性对应数据库表中的列。
// 定义一个实体类
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
}
配置EF Core数据上下文
在项目中使用EF Core,需要在DbContext中定义数据上下文。
需要安装
Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.SqlServer
using Microsoft.EntityFrameworkCore;
namespace ConsoleApp4
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
public class ApplicationDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(
@"Server=(localdb)\MSSQLLocalDB;Initial Catalog=mydb");
}
public DbSet<User> Users { get; set; }
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
}
创建数据库
上面创建了模型,接下来使用迁移来创建数据库。这里需要借助一些工具,有关的两个工具集如下:
1).NET Core 命令行接口 (CLI) 工具可用于 Windows、Linux 或 macOS。 这些命令以 dotnet ef 开头。将 dotnet ef 安装为全局工具或本地工具。 大多数开发人员偏向于使用以下命令将 dotnet ef 安装为全局工具:
dotnet tool install --global dotnet-ef
2)包管理器控制台 (PMC) 工具在 Windows 上的 Visual Studio 中运行。 这些命令以动词开头,例如 Add-Migration、Update-Database。 获取适用于 EF Core 的包管理器控制台工具,需要安装 Microsoft.EntityFrameworkCore.Tools 包。
Install-Package Microsoft.EntityFrameworkCore.Tools
完整的迁移命令过程如下:
1.安装 dotnet ef
2.安装命令行 EF Core 开发的工具套件Microsoft.EntityFrameworkCore.Design。
3.添加第一次迁移
dotnet ef migrations add initialcreate
dotnet ef migrations add initialcreate
Build started...
Build succeeded.
Done. To undo this action, use 'ef migrations remove'
注:如果使用高版本的SQL SERVER或者SQL SERVER EXPRESS会提示错误:“证书链是由不受信任的颁发机构颁发的”,解决方法是添加 ;Trust Server Certificate=true 到连接字符串。 这将强制客户端在不进行验证的情况下信任证书。
4.将迁移应用到数据库
dotnet ef database update
Build started...
Build succeeded.
Applying migration '20250420124636_initialcreate'.
Done.
查询数据库,发现已经新建了数据库和表。
增删改查
using Microsoft.EntityFrameworkCore;
namespace ConsoleApp4
{
internal class Program
{
static void Main(string[] args)
{
var dbContext = new ApplicationDbContext();
var userinfo = dbContext.Users;
Console.WriteLine("Inserting");
dbContext.Users.Add(new User { Name = "Tom", Email = "dese@123.com" });
dbContext.SaveChanges();
Console.WriteLine("Inserting complete.");
Console.WriteLine("Querying");
var user = dbContext.Users.OrderBy(b =>b.Id).FirstOrDefault();
Console.WriteLine(user.Name);
Console.WriteLine(user.Email);
Console.WriteLine("Querying complete.");
Console.WriteLine("Updating");
user.Email = "234@gamil.com";
dbContext.SaveChanges();
Console.WriteLine(user.Name);
Console.WriteLine(user.Email);
Console.WriteLine("Updating complete.");
Console.WriteLine("Delete");
dbContext.Remove(user);
dbContext.SaveChanges();
Console.WriteLine("Delete complete.");
}
}
}
public class ApplicationDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(
@"Server=(localdb)\MSSQLLocalDB;Initial Catalog=mydb");
}
public DbSet<User> Users { get; set; }
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
}