.NET EF框架搭建教程

Entity Framework(EF)是.NET平台上强大的对象关系映射(ORM)框架,能够简化数据库操作,让开发者通过面向对象的方式与数据库交互,本文将详细介绍如何在.NET项目中搭建EF框架,包括环境准备、模型定义、数据库配置及基本操作。
环境准备
首先确保已安装以下工具:
- Visual Studio:推荐使用Visual Studio 2022,支持.NET 6/7/8等版本。
- .NET SDK:从官网下载对应版本的.NET SDK(如.NET 7.0)。
- 数据库:可选择SQL Server、SQLite或PostgreSQL等,本文以SQL Server为例。
安装完成后,创建新的.NET项目(如控制台应用或Web API),通过NuGet包管理器安装EF Core相关包:
Microsoft.EntityFrameworkCore:核心包。Microsoft.EntityFrameworkCore.SqlServer:SQL Server提供程序。Microsoft.EntityFrameworkCore.Tools:命令行工具(用于迁移等操作)。
定义数据模型
模型类是EF与数据库交互的基础,需通过属性映射到数据库表结构,定义一个User模型:

public class User
{
public int Id { get; set; } // 主键,EF默认自动识别
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.Now;
}创建DbContext
DbContext是EF的核心类,负责管理数据库连接和实体操作,创建一个ApplicationDbContext类:
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : DbContext
{
public DbSet<User> Users { get; set; } // 对应Users表
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 可在此处配置模型关系、约束等
base.OnModelCreating(modelBuilder);
}
}配置数据库连接
在appsettings.json中添加数据库连接字符串(以SQL Server为例):
{
"ConnectionStrings": {
"DefaultConnection": "Server=.;Database=MyDb;Trusted_Connection=True;TrustServerCertificate=True;"
}
}在程序启动时配置DbContext(以控制台应用为例):
using Microsoft.EntityFrameworkCore;
class Program
{
static void Main(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseSqlServer("Server=.;Database=MyDb;Trusted_Connection=True;TrustServerCertificate=True;");
using (var context = new ApplicationDbContext(optionsBuilder.Options))
{
// 初始化数据库(开发阶段)
context.Database.EnsureCreated();
Console.WriteLine("数据库已创建或已存在。");
}
}
}数据库迁移
当模型类发生变化时,需通过迁移同步数据库结构,步骤如下:

启用迁移:在项目目录下打开终端,运行:
Add-Migration InitialCreate
此命令会生成一个包含数据库变更的迁移文件。
应用迁移:运行以下命令更新数据库:
Update-Database
回滚迁移(可选):
Update-Database MigrationName
基本CRUD操作
通过DbContext执行数据库操作:
添加数据
using (var context = new ApplicationDbContext(optionsBuilder.Options))
{
var user = new User { Name = "张三", Email = "zhangsan@example.com" };
context.Users.Add(user);
context.SaveChanges(); // 保存更改
}查询数据
using (var context = new ApplicationDbContext(optionsBuilder.Options))
{
var users = context.Users.Where(u => u.Name.Contains("张")).ToList();
foreach (var user in users)
{
Console.WriteLine($"ID: {user.Id}, Name: {user.Name}");
}
}更新数据
using (var context = new ApplicationDbContext(optionsBuilder.Options))
{
var user = context.Users.FirstOrDefault(u => u.Id == 1);
if (user != null)
{
user.Email = "newemail@example.com";
context.SaveChanges();
}
}删除数据
using (var context = new ApplicationDbContext(optionsBuilder.Options))
{
var user = context.Users.FirstOrDefault(u => u.Id == 1);
if (user != null)
{
context.Users.Remove(user);
context.SaveChanges();
}
}高级配置
配置表名和列名
通过[Table]和[Column]特性自定义映射:
[Table("UserInfo")]
public class User
{
[Column("UserId")]
public int Id { get; set; }
public string Name { get; set; }
}实体关系
定义Post与User的一对多关系:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public int UserId { get; set; }
public User User { get; set; }
}数据注解与Fluent API
复杂数据关系可通过OnModelCreating中的Fluent API配置,
modelBuilder.Entity<Post>()
.HasOne(p => p.User)
.WithMany(u => u.Posts)
.HasForeignKey(p => p.UserId);性能优化建议
- 延迟加载:避免不必要的查询,使用
AsNoTracking()提升查询性能。 - 批量操作:对于大量数据插入或更新,使用
AddRange或UpdateRange。 - 索引配置:通过
HasIndex为常用查询字段添加索引。
相关问答FAQs
Q1:EF Core和EF6有什么区别?如何选择?
A:EF Core是跨平台、轻量化的重构版本,支持.NET Core和.NET 5+,性能更高且更灵活;EF6仅支持.NET Framework,适合传统项目,新项目推荐使用EF Core。
Q2:如何处理EF Core中的并发冲突?
A:可通过[ConcurrencyCheck]特性或RowVersion属性实现乐观并发控制。
public class User
{
public int Id { get; set; }
[ConcurrencyCheck]
public string Name { get; set; }
}在更新时,EF会检查数据库中的值是否与当前值一致,若不一致则抛出DbUpdateConcurrencyException,需手动处理冲突。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/316027.html<
