Entity Framework三大开发模式详解

Entity Framework(EF)是.NET平台下的一种对象关系映射(ORM)框架,它简化了与数据库的交互,使开发人员能够以面向对象的方式来操作数据库。在Entity Framework中,有三种主要的开发模式:Database First、Model First和Code First。本文将深入探讨这三种开发模式,通过生动的语言和丰富的示例代码,让小白也能轻松理解。

最近想搞私域,欢迎各位大佬光临😀😀😀!

在这里插入图片描述

Database First:从数据库开始

首先,我们来介绍Database First模式。这个模式的核心思想是从数据库中逆向生成实体类和映射文件,然后在此基础上进行开发。这种模式适合在已有数据库的情况下进行开发,让我们一探究竟。

步骤一:创建数据库

首先,我们需要有一个数据库。假设我们要创建一个简单的博客系统,包含文章和作者两个表。我们可以使用如下的SQL语句在数据库中创建这两个表:

CREATE TABLE Authors
(
    AuthorId INT PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL
)

CREATE TABLE Posts
(
    PostId INT PRIMARY KEY,
    Title NVARCHAR(200) NOT NULL,
    Content NVARCHAR(MAX) NOT NULL,
    AuthorId INT FOREIGN KEY REFERENCES Authors(AuthorId)
)

步骤二:使用Entity Framework逆向生成实体类

现在,我们打开Visual Studio,并创建一个新的空白解决方案。然后,通过NuGet包管理器安装Entity Framework:

Install-Package EntityFramework

接下来,我们右键解决方案,选择“添加” -> “新建项”,然后选择“ADO.NET Entity Data Model”。在弹出的对话框中,选择“从数据库生成模型”。

按照提示连接到刚刚创建的数据库,并选择要生成的表。完成后,Entity Framework将为我们生成实体类和映射文件。

步骤三:使用生成的实体类进行开发

现在,我们可以在代码中直接使用生成的实体类了。比如,我们想要获取所有的作者信息:

using (var context = new BlogContext())
{
    var authors = context.Authors.ToList();
    foreach (var author in authors)
    {
        Console.WriteLine($"AuthorId: {author.AuthorId}, Name: {author.Name}");
    }
}

以上代码使用了Entity Framework提供的DbContext来访问数据库,并通过LINQ查询获取所有作者的信息。简单易懂,不是吗?

Model First:先有模型再有数据库

接下来,让我们转向Model First模式。这种模式的核心思想是先设计数据模型,然后根据模型生成数据库。适用于从零开始的项目,让我们看看如何操作。

步骤一:设计数据模型

打开Visual Studio,右键解决方案,选择“添加” -> “新建项”,然后选择“ADO.NET Entity Data Model”。但这次,选择“空模型”。

接下来,通过可视化工具设计数据模型。比如,我们在模型中添加一个Author实体和一个Post实体,然后设置它们之间的关系。

步骤二:生成数据库脚本

完成模型设计后,我们可以右键模型图,选择“生成数据库脚本”。这将生成包含所有表和关系的SQL脚本。

步骤三:执行生成的数据库脚本

将生成的SQL脚本在数据库中执行,就可以创建数据库和表了。

步骤四:使用生成的实体类进行开发

与Database First相似,Model First模式也生成了实体类。我们可以直接在代码中使用这些实体类,比如:

using (var context = new BlogContext())
{
    var authors = context.Authors.ToList();
    foreach (var author in authors)
    {
        Console.WriteLine($"AuthorId: {author.AuthorId}, Name: {author.Name}");
    }
}

Model First模式与Database First模式的区别在于数据模型的创建方式,但在开发阶段使用实体类的方式基本一致。

Code First:代码至上

最后,我们来看看Code First模式。这种模式的核心思想是先编写实体类和数据上下文,然后根据这些代码生成数据库。这是一种更加面向对象的方式,让我们一探究竟。

步骤一:编写实体类和数据上下文

首先,我们需要创建实体类。以我们的博客系统为例,我们可以这样定义AuthorPost类:

public class Author
{
    public int AuthorId { get; set; }
    public string Name { get; set; }
}

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

    public int AuthorId { get; set; }
    public Author Author { get; set; }
}

public class BlogContext : DbContext
{
    public DbSet<Author> Authors { get; set; }
    public DbSet<Post> Posts { get; set; }
}

步骤二:配置Code First约定

通过默认的约定,Entity Framework会将AuthorPost类映射到数据库中的表。如果你需要自定义映射,可以通过Fluent API进行配置。

步骤三:使用迁移生成数据库

在Package Manager Console中运行如下命令:

Enable-Migrations
Add-Migration InitialCreate
Update-Database

这将创建一个名为InitialCreate的迁移,并根据这个迁移生成数据库。

步骤四:使用生成的实体类进行开发

最后,我们可以在代码中使用生成的实体类了。

比如:

using (var context = new BlogContext())
{
    var authors = context.Authors.ToList();
    foreach (var author in authors)
    {
        Console.WriteLine($"AuthorId: {author.AuthorId}, Name: {author.Name}");
    }
}

Code First模式通过代码优先的方式让数据库与代码保持一致,更加贴近开发者的习惯。

总结

在这篇博客中,我们深入探讨了Entity Framework的三大开发模式:Database First、Model First和Code First。每种模式都有其独特的优势和适用场景,选择合适的模式取决于项目的需求和开发团队的习惯。

无论你是从已有数据库开始,还是从零开始设计数据模型,亦或是更喜欢通过代码来定义数据库结构,Entity Framework都能满足你的需求。希望通过本文的详细介绍,你对Entity Framework的三大开发模式有了更深入的了解,能够更灵活地选择和使用适合自己项目的模式。在你的编程之旅中,愿Entity Framework成为你数据库操作的得力助手,让开发变得更加轻松愉快!

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

相关推荐

  1. 设计模式原则

    2024-03-22 23:56:01       49 阅读
  2. 设计模式-分类

    2024-03-22 23:56:01       22 阅读
  3. 设计模式-工厂模式

    2024-03-22 23:56:01       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 23:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 23:56:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 23:56:01       82 阅读
  4. Python语言-面向对象

    2024-03-22 23:56:01       91 阅读

热门阅读

  1. leetcode 179.最大数

    2024-03-22 23:56:01       37 阅读
  2. 高阶组件怎么实现?

    2024-03-22 23:56:01       46 阅读
  3. C++ 常用

    2024-03-22 23:56:01       38 阅读
  4. 如何排查cpu使用过高?

    2024-03-22 23:56:01       46 阅读
  5. MOSDANET

    MOSDANET

    2024-03-22 23:56:01      41 阅读
  6. vue3没有this怎么办?

    2024-03-22 23:56:01       43 阅读
  7. 命令执行漏洞

    2024-03-22 23:56:01       34 阅读
  8. 配置Flask-CLI以便与Flask应用程序一起使用

    2024-03-22 23:56:01       42 阅读