TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

CEFCoreCodeFirst从入门到实战:手把手教你用代码定义数据库

2026-04-06
/
0 评论
/
3 阅读
/
正在检测是否收录...
04/06

正文:

如果你厌倦了手动编写SQL语句,EF Core的Code First模式会像魔术师一样,将C#类变成数据库表。今天我们就用一杯咖啡的时间,从零开始掌握这项魔法。


一、Code First的核心思想

Code First的核心是用C#类定义数据结构。比如我们要建一个博客系统,先定义PostComment类:

public class Post  
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public List<Comment> Comments { get; set; } = new();
}

public class Comment  
{
    public int Id { get; set; }
    public string Text { get; set; }
    public int PostId { get; set; }
    public Post Post { get; set; }
}

注意List<Comment>Post的导航属性——它们定义了表之间的一对多关系


二、配置DbContext:数据库的桥梁

DbContext是操作数据库的入口,继承自Microsoft.EntityFrameworkCore.DbContext

public class BlogContext : DbContext  
{
    public DbSet<Post> Posts { get; set; }  
    public DbSet<Comment> Comments { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)  
        => options.UseSqlServer("Server=.;Database=MyBlog;Trusted_Connection=True;");
}

这里用了SQL Server连接字符串,如果你想用MySQL,只需替换为UseMySql()


三、数据库迁移:让代码落地

  1. 安装工具包
    bash dotnet tool install --global dotnet-ef
  2. 创建迁移
    bash dotnet ef migrations add InitialCreate
  3. 更新数据库
    bash dotnet ef database update

执行后你会看到数据库里自动生成了PostsComments表,连外键都帮你配好了!


四、CRUD实战:操作数据

插入数据

using var db = new BlogContext();  
var post = new Post { Title = "EF Core指南", Content = "..." };  
db.Posts.Add(post);  
db.SaveChanges();  // 数据真正入库

查询数据

var hotPosts = db.Posts  
    .Where(p => p.Title.Contains("指南"))  
    .Include(p => p.Comments)  // 加载关联评论  
    .ToList();

删除数据

var post = db.Posts.Find(1);  
db.Posts.Remove(post);  
db.SaveChanges();


五、高级技巧:数据注解与Fluent API

如果想自定义字段约束,可以用数据注解

public class Post  
{
    [Key]  // 显式声明主键
    public int Id { get; set; }

    [Required, MaxLength(100)]  // 非空且长度限制
    public string Title { get; set; }
}

或者用更灵活的Fluent API(在DbContext中配置):

protected override void OnModelCreating(ModelBuilder modelBuilder)  
{
    modelBuilder.Entity<Post>()
        .Property(p => p.Title)
        .IsRequired()
        .HasMaxLength(100);
}


六、避坑指南

  1. 延迟加载陷阱:未使用Include时关联数据为null,需显式加载;
  2. 性能优化:批量操作使用AddRange替代循环Add;
  3. 迁移回滚dotnet ef database update PreviousMigrationName

现在,你已经掌握了EF Core Code First的完整工作流。接下来,试着用这个魔法构建你的项目吧!

朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/43714/(转载时请注明本文出处及文章链接)

评论 (0)
37,968 文章数
92 评论量

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月