entity framework core使用(使用 Entity Framework Core 处理数据)

作者 : 慕源网 本文共6360个字,预计阅读时间需要16分钟 发布时间: 2022-03-30 共62人阅读

介绍

本文的目的是告诉您如何在 ASP.NET 应用程序中使用数据库,例如 SQL Server、SQLite 和 PostgreSQL,并在名为Entity Framework Core 的开源框架的帮助下将对象映射到数据( EF Core)

了解 EF Core

Entity Framework Core 是 Microsoft 最新版本的 Entity Framework,它是一个对象关系映射器 (ORM)。对象关系映射器是一种允许开发人员以面向对象的方式处理数据的技术。ORM 是预先编写的代码库,可以做很多事情,下面列出了其中一些。

  • 它将域模型映射到数据库对象。
  • 它生成查询并自行执行它们。
  • 带有内置日志记录功能(记录实体)。
  • 缓存和事务管理。

强烈推荐

海量程序代码,编程资源,无论你是小白还是大神研究借鉴别人优秀的源码产品学习成熟的专业技术强势助力帮你提高技巧与技能。在此处获取,给你一个全面升级的机会。只有你更值钱,才能更赚钱

如果你是初级程序员可以研究别人的代码提高技术,如果你喜欢搞网盟或者外包,可以让你快速建站,还等什么赶快关注吧,我们会持续输出相关资源

海量源码程序,学习别人的产品设计思维与技术实践

如何使用 EF Core

为了将 EF Core 用于数据库,您可以根据情况使用两种方法。

  • Code First
    当数据库不存在时,我们创建一个模型,然后 EF Core 使用定义的字段创建一个数据库。
  • Database First
    在这种情况下,数据库已经到位,因此我们设计了一个模型来匹配它。

在这里,我们将从 Code First 方法开始,

安装 EF Core

第1步

创建一个新项目并选择 ASP.NET Web App (Model-View-Controller)

entity framework core使用(使用 Entity Framework Core 处理数据)

现在我们可以通过包管理工具之一安装 Entity Framework Core,即Nuget 包管理器

注意:确保安装与您的 .Net 版本兼容的软件包。

第2步

为此,请转到工具>>NuGet 包管理器>>管理解决方案的 NuGet 包…

entity framework core使用(使用 Entity Framework Core 处理数据)

第 3 步

确保在顶部选择浏览器并搜索“ EntityFrameworkCore ”并安装 Package Microsoft .EntityFrameworkCore

entity framework core使用(使用 Entity Framework Core 处理数据)

第四步

选择您的项目,单击安装并查看对您的项目所做的所有更改,并接受附加到您将要安装的各种软件包的许可证。

entity framework core使用(使用 Entity Framework Core 处理数据)

还安装了其他依赖的 Nuget 包。

除了 EF Core,我们还需要EF Core DB Provider,它也包含在 NuGet 包中。

第 5 步

为我们要访问的数据库提供程序安装 NuGet 包。这里我们使用 SQL SERVER 作为数据库提供程序,因此我们将安装“ Microsoft.EntityFrameworkCore.SqlServer”

对于不同的数据库,有不同的 EF Core DB 提供程序可用。

entity framework core使用(使用 Entity Framework Core 处理数据)

与 DB Provider 一起,我们将需要EF Core Tools ,它允许我们轻松执行 EF Core 命令。该工具将允许我们直接从包管理器控制台 (PMC) 或使用 Dotnet CLI执行 EF Core 命令,例如迁移 和脚手架。

第 6 步

为 EF Core Tools “ Microsoft.EntityFrameworkCore.Tools”安装 NuGet 包。

entity framework core使用(使用 Entity Framework Core 处理数据)

所以到目前为止,我们已经准备好在我们的应用程序中使用 EF Core。

使用 EF Core

第1步

让我们导航到模型文件夹并创建名为 Employee.cs 的类

entity framework core使用(使用 Entity Framework Core 处理数据)

第2步

我们将向 Employee Model 类添加一些属性,作为数据库中的 Column,因此将 Employee 类更改如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace EntityFrameworkDemo.Models
{
    public class Employee
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Designation { get; set; }
        public int Age { get; set; }
        public decimal Salary { get; set; }
        public string FullName { get
            {
                return $"{FirstName} {LastName}";
            }
        }
    }
}

现在,要与数据库交互,我们需要添加DbContext 类,它是 EntityFramework 的一个组成部分。

DBContext 类提供的一些特性:

  • 维护数据库完整性。
  • 配置模型。
  • 对数据库执行 CRUD 操作。
  • 交易管理。

第 3 步

为了创建 DbContext 类,我们将在根级别添加一个名为Data的文件夹,并在其中创建一个名为EmployeeContext.cs的类,我们将从DbContext Class继承,因此 EmployeeContext 类将成为我们的 Context 类。

entity framework core使用(使用 Entity Framework Core 处理数据)

第四步

现在创建 EmployeeContext 类的构造函数,以便告诉 EF Core 数据库提供程序的连接字符串。

为了通过 DbContext 类执行任何有用的任务,我们需要一个DbContextOptions<TContext>类的实例。DbContextOptions的实例携带所有必需的配置信息,例如连接字符串、数据库提供程序等。

要传递 DbContextOptions 实例,我们需要使用EmployeeContext类的构造函数,如下所示,在 DbContextOptions<TContext> 中,TContext是我们正在使用的通用类型上下文类。

一个选项被传递给基类,以便告诉基构造器我们正在使用哪个重载构造器。

using Microsoft.EntityFrameworkCore;

namespace EntityFrameworkDemo.Data
{
    public class EmployeeContext:DbContext
    {
        public EmployeeContext(DbContextOptions<EmployeeContext> options):base(options)
        {

        }
    }
}

第 5 步

Entity Framework Core DbContext 类包括一个属性,即DbSet<TEntity>用于应用程序中的每个实体。在我们的工作应用程序中,有一个模型类需要映射,即 Employee 类,因此添加 Employee Dbset 以在数据库中创建一个表。

namespace EntityFrameworkDemo.Data
{
    public class EmployeeContext:DbContext
    {
        public EmployeeContext(DbContextOptions<EmployeeContext> options):base(options)
        {

        }
        //The DbSet class represents an entity set that can be used for CRUD operations.
        public DbSet<Employee> Employee { get; set; }
    }
}

第 6 步

现在,为了连接到数据库,我们需要在appsettings.json文件中定义的数据库连接字符串。

将以下 JSON 对添加到您的 appsetting.json

"ConnectionStrings": { "DefaultConnection": "Server = DESKTOP-OGH3VOT\MSSQLSERVER01; Database=EntityFrameWorkDB;
Trusted_Connection=True;MultipleActiveResultSets=true" }

其中 server 用作 DESKTOP-OGH3VOT\MSSQLSERVER01 可以是您的 SQL Server 名称,

数据库名称设置为 EntityFrameworkDB,

并且 Trusted_Connection 和 Multiple Query Fetching 设置为 true。

第 7 步

现在为了使用此连接字符串,首先我们将读取此连接字符串,然后通过将服务添加到Startup.cs文件来使用上下文类对其进行配置。

services.AddDbContext<EmployeeContext>(option =>
            option.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")
            ));

此处配置接口将从appsettings.json文件中读取数据,GetConnectionString()方法会查找其键为 ConnectionStrings:<connection string name> 的配置值。

我们现在准备好了代码。现在是时候添加一个迁移通知数据库我们的模型类和配置并相应地创建一个数据库。

但在此之前,Migration 实际上做了什么?

  • 迁移是使数据库始终使用我们编写的代码进行更新的方法。
  • 每当我们对数据模型类进行更改时,我们都需要运行迁移以使数据库更新我们的更改。
  • EF Core 迁移只是我们在包管理器控制台 (PCM)Dotnet CLI中执行的命令。
  • 在我们的应用程序中,我们将使用包管理器控制台 (PCM)。

第 8 步

所以导航到工具>>NuGet包管理器>>包管理器控制台

entity framework core使用(使用 Entity Framework Core 处理数据)

包管理器控制台将在页脚中打开,您可以在其中编写 EF Core 迁移命令

第 9 步

现在在包管理器控制台中执行以下命令:

PM> add-migration Initial

因此,这将在迁移命名文件夹中创建<TimeStamp>_Initial命名迁移脚本,如下所示。

entity framework core使用(使用 Entity Framework Core 处理数据)

现在在创建迁移脚本之后,是时候更新数据库了:

第 10 步

在包管理器控制台中执行以下命令来更新或创建数据库模式。

PM> Update-Database

Update 命令将根据上下文类和域类以及迁移脚本创建数据库。

当我们的数据库创建_EFMigrationsHistory 时,它会记录我们执行的所有迁移。

entity framework core使用(使用 Entity Framework Core 处理数据)

到目前为止,我们已经创建了一个包含表和列的数据库,但它仍然是空的,所以我们需要添加一些测试数据。

用测试数据初始化数据库

第1步

为了生成一些数据,让我们 在数据文件夹中创建名为SeedData的类。

在该类中添加我们需要传递到数据库的以下测试数据

namespace EntityFrameworkDemo.Data
{
    public class SeedData
    {
        public static void SeedDataDB(EmployeeContext context)
        {
            context.Database.EnsureCreated();    //It Ensures that Database For Context Already Exists

            if (context.Employee.Any())
            {
                return;   //Looks For Any Data in Employee DBSet
            }

            //Initialising Data
            var employees = new Employee[]
            {
                new Employee{FirstName="Bob",LastName="Wilson",Designation="Accounting",Age=32,Salary=50000},
                new Employee{FirstName="Mark",LastName="Mitchel",Designation="Human Resources",Age=26,Salary=48000},
                new Employee{FirstName="Parker",LastName="Chelse",Designation="Chartered Financial Analyst",Age=38,Salary=78000},
                new Employee{FirstName="George",LastName="Katie",Designation="Finance",Age=52,Salary=97000},
                new Employee{FirstName="Marie",LastName="Wood",Designation="Software Analyst",Age=31,Salary=65000},
                new Employee{FirstName="Lake",LastName="Marnus",Designation="Supply Chain and Logistics",Age=33,Salary=54000}
            };

            //Add Method Starts Tracking the Entities
            foreach(var employeeData in employees)
            {
                context.Employee.Add(employeeData);
            }
            context.SaveChanges();     //SaveChanges Method will makes all the Changes to Database
        }
    }
}

第2步

现在我们需要在运行应用程序时添加此数据,为此,我们需要在Program.cs文件中的Main 方法中配置数据库更改

导航到Program.cs 文件并对其进行以下更改。

public class Program
    {
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();
            CreateDbIfNotExists(host);
            host.Run();

        }
        public static void CreateDbIfNotExists(IHost host)
        {
            using(var scope = host.Services.CreateScope())  //IServiceScope Used for Scoped Services
            {
                var Services = scope.ServiceProvider;     //Resolve Dependency
                try
                {
                    var context = Services.GetRequiredService<EmployeeContext>();
                    SeedData.SeedDataDB(context);
                }
                catch (Exception ex)
                {
                    var logger = Services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An Error Occured Creating in DB");
                    throw;
                }
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

Program.cs 文件中,我们创建了一个上下文类的实例,然后我们调用了 SeedData.SeedDataDB方法。

每当应用程序第一次运行时,都会创建数据库并加载测试数据。

第 3 步

让我们运行应用程序,

entity framework core使用(使用 Entity Framework Core 处理数据)

第四步

现在检查数据库并查看数据库是否已加载,这就是我们将测试数据从代码加载到数据库的方式。

结论

在本文中,我们使用 EF Core 为数据库配置了模型类和上下文类。在以后的文章中,我们将使用 EF Core 执行 CRUD 操作,然后我们还将添加一些预构建验证和自定义验证。

所以,如果您觉得这篇文章有帮助,请与您的朋友分享。

你可以在这个Github Profile上找到源代码。

 


慕源网 » entity framework core使用(使用 Entity Framework Core 处理数据)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录