菜鸟科技网

.net ef框架搭建教程,NET EF框架搭建教程,从零开始怎么搭建?

.NET EF框架搭建教程

.net ef框架搭建教程,NET EF框架搭建教程,从零开始怎么搭建?-图1
(图片来源网络,侵删)

Entity Framework(EF)是.NET平台上强大的对象关系映射(ORM)框架,能够简化数据库操作,让开发者通过面向对象的方式与数据库交互,本文将详细介绍如何在.NET项目中搭建EF框架,包括环境准备、模型定义、数据库配置及基本操作。

环境准备

首先确保已安装以下工具:

  1. Visual Studio:推荐使用Visual Studio 2022,支持.NET 6/7/8等版本。
  2. .NET SDK:从官网下载对应版本的.NET SDK(如.NET 7.0)。
  3. 数据库:可选择SQL Server、SQLite或PostgreSQL等,本文以SQL Server为例。

安装完成后,创建新的.NET项目(如控制台应用或Web API),通过NuGet包管理器安装EF Core相关包:

  • Microsoft.EntityFrameworkCore:核心包。
  • Microsoft.EntityFrameworkCore.SqlServer:SQL Server提供程序。
  • Microsoft.EntityFrameworkCore.Tools:命令行工具(用于迁移等操作)。

定义数据模型

模型类是EF与数据库交互的基础,需通过属性映射到数据库表结构,定义一个User模型:

.net ef框架搭建教程,NET EF框架搭建教程,从零开始怎么搭建?-图2
(图片来源网络,侵删)
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("数据库已创建或已存在。");
        }
    }
}

数据库迁移

当模型类发生变化时,需通过迁移同步数据库结构,步骤如下:

.net ef框架搭建教程,NET EF框架搭建教程,从零开始怎么搭建?-图3
(图片来源网络,侵删)
  1. 启用迁移:在项目目录下打开终端,运行:

    Add-Migration InitialCreate

    此命令会生成一个包含数据库变更的迁移文件。

  2. 应用迁移:运行以下命令更新数据库:

    Update-Database
  3. 回滚迁移(可选):

    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; }
}

实体关系

定义PostUser的一对多关系:

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);

性能优化建议

  1. 延迟加载:避免不必要的查询,使用AsNoTracking()提升查询性能。
  2. 批量操作:对于大量数据插入或更新,使用AddRangeUpdateRange
  3. 索引配置:通过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,需手动处理冲突。

分享:
扫描分享到社交APP
上一篇
下一篇