菜鸟科技网

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

.NET EF框架搭建教程

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

Entity Framework(EF)是.NET框架中一款强大的对象关系映射(ORM)工具,它能够将数据库表映射为.NET对象,使开发者可以使用面向对象的方式操作数据库,而无需编写大量的SQL语句,本文将详细介绍如何使用.NET EF框架搭建一个数据访问层,包括环境准备、模型创建、数据库配置以及基本的增删改查操作。

我们需要准备开发环境,确保你的电脑上已经安装了.NET SDK(建议使用.NET 6或更高版本),以及一个集成开发环境(IDE),如Visual Studio 2022或Visual Studio Code,对于数据库,可以选择SQL Server、SQLite、MySQL等多种数据库,本教程以SQL Server为例进行讲解。

我们创建一个新的.NET项目,打开Visual Studio,选择“创建新项目”,然后选择“ASP.NET Core Web API”或“控制台应用程序”模板,为项目命名并点击“创建”,项目创建成功后,我们需要通过NuGet包管理器安装EF Core的相关包,在解决方案资源管理器中右键点击项目,选择“管理NuGet程序包”,搜索并安装以下包:

  • Microsoft.EntityFrameworkCore:EF Core的核心包。
  • Microsoft.EntityFrameworkCore.SqlServer:SQL Server数据库提供程序。
  • Microsoft.EntityFrameworkCore.Tools:EF Core命令行工具。
  • Microsoft.EntityFrameworkCore.Design:设计时支持包。

安装完成后,我们开始定义数据模型,假设我们要开发一个简单的博客系统,需要定义BlogPost两个实体类,在项目中创建一个名为Models的文件夹,并在其中创建Blog.csPost.cs文件。Blog类包含BlogIdNamePosts属性,Post类包含PostIdTitleContentBlog属性,注意,在Blog类中定义一个Posts导航属性,类型为ICollection<Post>,表示一个博客可以包含多篇文章;在Post类中定义一个Blog导航属性,类型为Blog,表示每篇文章都属于一个博客。

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

定义好模型后,我们需要创建一个DbContext类,它是EF Core与数据库交互的核心,在项目中创建一个名为Data的文件夹,添加一个ApplicationDbContext.cs文件,使其继承自DbContext,在ApplicationDbContext类中,定义两个DbSet属性:DbSet<Blog> BlogsDbSet<Post> Posts,分别对应数据库中的BlogsPosts表,重写OnConfiguring方法,配置数据库连接字符串,在OnConfiguring方法中,使用UseSqlServer方法并传入你的SQL Server连接字符串。optionsBuilder.UseSqlServer("Server=.;Database=BlogDb;Trusted_Connection=True;");

我们需要初始化数据库,打开程序包管理器控制台(Package Manager Console),在“项目”下拉菜单中选择你的项目,然后执行以下命令:

  • Add-Migration InitialCreate:此命令会根据你的模型类创建一个迁移类,用于生成数据库架构。
  • Update-Database:此命令会应用迁移,在数据库中创建相应的表。

执行成功后,你可以在SQL Server Management Studio中看到BlogsPosts表已经创建成功。

我们可以开始进行数据操作了,在项目中创建一个Services文件夹,添加一个BlogService.cs文件,用于封装对Blog实体的操作,在BlogService类中,注入ApplicationDbContext,然后实现创建博客、获取所有博客、根据ID获取博客、更新博客和删除博客等方法,创建博客的方法如下:

.net ef框架搭建教程,NET EF框架搭建从哪开始?-图3
(图片来源网络,侵删)
public async Task<Blog> CreateBlogAsync(Blog blog)
{
    _context.Blogs.Add(blog);
    await _context.SaveChangesAsync();
    return blog;
}

获取所有博客的方法如下:

public async Task<List<Blog>> GetAllBlogsAsync()
{
    return await _context.Blogs.ToListAsync();
}

为了测试这些方法,我们可以在ASP.NET Core Web API项目中创建一个控制器,在Controllers文件夹中添加BlogsController.cs文件,注入BlogService,然后创建对应的API端点。

[ApiController]
[Route("api/[controller]")]
public class BlogsController : ControllerBase
{
    private readonly BlogService _blogService;
    public BlogsController(BlogService blogService)
    {
        _blogService = blogService;
    }
    [HttpPost]
    public async Task<IActionResult> CreateBlog([FromBody] Blog blog)
    {
        var createdBlog = await _blogService.CreateBlogAsync(blog);
        return CreatedAtAction(nameof(GetBlog), new { id = createdBlog.BlogId }, createdBlog);
    }
    [HttpGet]
    public async Task<IActionResult> GetAllBlogs()
    {
        var blogs = await _blogService.GetAllBlogsAsync();
        return Ok(blogs);
    }
}

除了基本的CRUD操作,EF Core还支持更复杂的查询功能,如过滤、排序、分页等,要获取名称包含“ASP.NET”的所有博客,可以使用以下查询:

var blogs = await _context.Blogs
    .Where(b => b.Name.Contains("ASP.NET"))
    .OrderBy(b => b.Name)
    .ToListAsync();

EF Core还支持事务处理,确保多个操作要么全部成功,要么全部失败,在创建博客的同时创建一篇文章,可以使用以下代码:

using var transaction = await _context.Database.BeginTransactionAsync();
try
{
    var blog = new Blog { Name = "Test Blog" };
    _context.Blogs.Add(blog);
    await _context.SaveChangesAsync();
    var post = new Post { Title = "First Post", Content = "Hello World", BlogId = blog.BlogId };
    _context.Posts.Add(post);
    await _context.SaveChangesAsync();
    await transaction.CommitAsync();
}
catch
{
    await transaction.RollbackAsync();
    throw;
}

在实际开发中,我们还需要考虑数据库迁移的管理,当模型发生变化时(如添加新属性、修改关系等),我们需要创建新的迁移并更新数据库,可以使用以下命令:

  • Add-Migration <MigrationName>:创建一个新的迁移。
  • Update-Database:应用所有未应用的迁移。
  • Script-Migration:生成迁移脚本,可用于在其他环境中部署数据库更改。

EF Core还支持反向工程,即根据现有的数据库生成模型类和DbContext类,可以使用以下命令:

  • Scaffold-DbContext "Connection String" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models:根据数据库连接字符串生成模型和DbContext。

搭建.NET EF框架数据访问层的步骤包括:安装必要的NuGet包、定义实体模型、创建DbContext类、配置数据库连接、初始化数据库、实现数据操作方法以及测试功能,EF Core的强大功能可以大大提高开发效率,减少编写和维护SQL代码的工作量。

相关问答FAQs:

  1. 问:在使用EF Core时,如何处理数据库连接字符串的配置,以确保在不同环境(开发、测试、生产)中使用不同的连接字符串? 答:在ASP.NET Core应用中,推荐使用appsettings.json文件来管理不同环境的配置,在appsettings.Development.json中定义开发环境的连接字符串,在appsettings.Production.json中定义生产环境的连接字符串,然后在Program.cs(或Startup.cs)中,通过ConfigurationBuilder加载这些配置文件,在ApplicationDbContextOnConfiguring方法中,使用optionsBuilder.UseConfiguration(Configuration.GetConnectionString("DefaultConnection"))来获取当前环境的连接字符串,这样,应用在运行时会根据当前环境(由ASPNETCORE_ENVIRONMENT变量指定)自动加载对应的配置文件。

  2. 问:EF Core中的“跟踪”(Tracking)和“无跟踪”(No-Tracking)查询有什么区别?在什么情况下应该使用无跟踪查询? 答:EF Core的查询默认是“跟踪”模式,这意味着查询返回的实体会被DbContext跟踪,当这些实体被修改并调用SaveChanges时,EF Core会自动生成UPDATE语句来更新数据库,而“无跟踪”查询则不会跟踪返回的实体,对它们的修改不会被保存到数据库,无跟踪查询的主要优点是性能更好,因为EF Core不需要维护实体的变更状态,当只需要读取数据而不需要修改时,应该使用无跟踪查询,例如在只读的API端点或报表功能中,可以通过调用.AsNoTracking()方法来执行无跟踪查询,var blogs = await _context.Blogs.AsNoTracking().ToListAsync();

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