跳到主要内容

C# EF 代码优先

介绍

Entity Framework (EF) 是 .NET 中一个强大的对象关系映射 (ORM) 框架,它允许开发者通过面向对象的方式与数据库进行交互。EF 提供了三种主要的工作方式:数据库优先、模型优先和代码优先。本文将重点介绍代码优先方法。

代码优先是一种开发方法,开发者首先编写 C# 类来定义数据模型,然后通过 EF 自动生成数据库。这种方法非常适合敏捷开发,因为它允许开发者专注于业务逻辑,而不必过多关注数据库的细节。

代码优先的优势

  • 灵活性:开发者可以完全控制数据模型的设计。
  • 快速迭代:数据库结构可以随着业务需求的变化而快速调整。
  • 易于维护:代码优先使得数据库迁移变得简单,开发者可以通过代码来管理数据库的变更。

设置环境

在开始之前,确保你已经安装了以下工具:

  • .NET SDK
  • Visual Studio 或 Visual Studio Code
  • Entity Framework Core

你可以通过以下命令安装 EF Core:

bash
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

创建数据模型

首先,我们定义一个简单的数据模型。假设我们正在开发一个博客系统,我们需要一个 Blog 类和一个 Post 类。

csharp
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }

public List<Post> Posts { get; set; }
}

public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }

public int BlogId { get; set; }
public Blog Blog { get; set; }
}

在这个例子中,Blog 类包含一个 BlogId 和一个 Url 属性,以及一个 Posts 列表。Post 类包含 PostIdTitleContentBlogId 属性,并且与 Blog 类有一个外键关系。

创建数据库上下文

接下来,我们需要创建一个数据库上下文类,它将作为数据库和我们的数据模型之间的桥梁。

csharp
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");
}
}

在这个例子中,BloggingContext 类继承自 DbContext,并且包含了两个 DbSet 属性:BlogsPostsOnConfiguring 方法用于配置数据库连接字符串。

数据库迁移

一旦我们定义了数据模型和数据库上下文,我们就可以使用 EF Core 的迁移功能来创建数据库。

首先,运行以下命令来创建一个迁移:

bash
dotnet ef migrations add InitialCreate

这将生成一个迁移文件,其中包含创建数据库所需的 SQL 语句。接下来,运行以下命令来应用迁移并创建数据库:

bash
dotnet ef database update

实际案例

假设我们想要在数据库中插入一些数据。我们可以编写以下代码:

csharp
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
db.Blogs.Add(blog);
db.SaveChanges();

var post = new Post { Title = "Hello World", Content = "This is my first post", BlogId = blog.BlogId };
db.Posts.Add(post);
db.SaveChanges();
}

在这个例子中,我们创建了一个新的 Blog 对象并将其添加到数据库中。然后,我们创建了一个新的 Post 对象并将其与刚刚创建的 Blog 关联起来。

总结

通过代码优先方法,我们可以轻松地在 C# 中创建和管理数据库。EF Core 提供了强大的工具来帮助我们快速迭代和维护数据库结构。希望本文能帮助你理解并开始使用 EF 代码优先方法。

附加资源

练习

  1. 尝试创建一个新的数据模型,例如 UserComment,并使用代码优先方法将其添加到数据库中。
  2. 修改现有的 BlogPost 类,添加新的属性,并使用迁移功能更新数据库结构。