ASP.NET Core 3.1系列(19)——EFCore中的添加实体操作

news2024/11/23 12:17:48

1、前言

前面介绍了EFCore中关于查询和执行原生SQL的操作,这篇博客就来介绍一下EFCore中添加实体的相关操作。关于添加实体,EFCore提供了多种方法供开发者使用。但EFCore中针对实体的一系列操作最终都会被转换成SQL,因此这些方法之间也存在着一些差异,下面开始介绍。

2、构建测试数据库

还是与之前一样,在SQL Server中创建一个数据库Dao,然后创建一张Author数据表,代码如下:

USE [Dao]
GO

/****** Object:  Table [dbo].[Author]    Script Date: 2022/12/16 8:55:33 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Author](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](20) NULL,
	[Gender] [nvarchar](10) NULL,
	[Age] [int] NULL,
	[Email] [nvarchar](30) NULL,
 CONSTRAINT [PK_Author] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Author表数据如下所示:

IdNameGenderAgeEmail
1张三3511111111@qq.com
2李四4022222222@qq.com
3王五3733333333@qq.com

最终生成的实体类和数据库上下文代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
// If you have enabled NRTs for your project, then un-comment the following line:
// #nullable disable

namespace App.Models
{
    public partial class Author
    {
        [Key]
        public int Id { get; set; }
        [StringLength(20)]
        public string Name { get; set; }
        [StringLength(10)]
        public string Gender { get; set; }
        public int? Age { get; set; }
        [StringLength(30)]
        public string Email { get; set; }
    }
}
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using App.Models;

// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
// If you have enabled NRTs for your project, then un-comment the following line:
// #nullable disable

namespace App.Context
{
    public partial class DaoDbContext : DbContext
    {
        public DaoDbContext()
        {
        }

        public DaoDbContext(DbContextOptions<DaoDbContext> options)
            : base(options)
        {
        }

        public virtual DbSet<Author> Author { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer("Data Source=rt-dongshenfeng;Initial Catalog=Dao;User ID=sa;Password=gis1a6b7c!Z;");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }
}

3、添加单个实体

如果是添加单个实体,可以使用EFCore中的Add方法。Add方法很好理解,就是在DbSet中添加一个实体,最后调用SaveChanges保存即可。代码如下所示:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            Author author = new Author
            {
                Name = "赵六",
                Gender = "女",
                Age = 42,
                Email = "44444444@qq.com"
            };
            _dbContext.Set<Author>().Add(author);
            return _dbContext.SaveChanges();
        }
    }
}

除了使用Add方法,EFCore中也可以使用Entry方法将实体的状态设置为Added,从而实现添加实体的功能,代码如下所示:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            Author author = new Author
            {
                Name = "赵六",
                Gender = "女",
                Age = 42,
                Email = "44444444@qq.com"
            };
            _dbContext.Entry(author).State = EntityState.Added;
            return _dbContext.SaveChanges();
        }
    }
}

这两种方法都可以实现添加单个实体的功能,它们最终生成的SQL如下所示:

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Author] ([Age], [Email], [Gender], [Name])
VALUES (@p0, @p1, @p2, @p3);
SELECT [Id]
FROM [Author]
WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 int,@p1 nvarchar(30),@p2 nvarchar(10),@p3 nvarchar(20)',@p0=42,@p1=N'44444444@qq.com',@p2=N'女',@p3=N'赵六'

4、批量添加实体

既然AddEntry方法可以实现添加单个实体的功能,那我们自然会想到在foreach循环中去调用它们,从而实现批量添加实体的功能,下面的代码演示了利用Add结合foreach实现批量添加实体的功能:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            List<Author> authors = new List<Author>()
            {
                new Author
                {
                    Name = "周一",
                    Gender = "男",
                    Age = 25,
                    Email = "55555555@qq.com"
                },
                new Author
                {
                    Name = "周二",
                    Gender = "女",
                    Age = 26,
                    Email = "66666666@qq.com"
                },
                new Author
                {
                    Name = "周三",
                    Gender = "男",
                    Age = 27,
                    Email = "77777777@qq.com"
                }
            };
            foreach (Author author in authors)
            {
                _dbContext.Set<Author>().Add(author);
            }
            return _dbContext.SaveChanges();
        }
    }
}

也可以利用Entry方法结合foreach实现批量添加实体,代码如下:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            List<Author> authors = new List<Author>()
            {
                new Author
                {
                    Name = "周一",
                    Gender = "男",
                    Age = 25,
                    Email = "55555555@qq.com"
                },
                new Author
                {
                    Name = "周二",
                    Gender = "女",
                    Age = 26,
                    Email = "66666666@qq.com"
                },
                new Author
                {
                    Name = "周三",
                    Gender = "男",
                    Age = 27,
                    Email = "77777777@qq.com"
                }
            };
            foreach (Author author in authors)
            {
                _dbContext.Entry(author).State = EntityState.Added;
            }
            return _dbContext.SaveChanges();
        }
    }
}

EFCore中也提供了AddRange方法用来实现批量添加实体,代码如下:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            List<Author> authors = new List<Author>()
            {
                new Author
                {
                    Name = "周一",
                    Gender = "男",
                    Age = 25,
                    Email = "55555555@qq.com"
                },
                new Author
                {
                    Name = "周二",
                    Gender = "女",
                    Age = 26,
                    Email = "66666666@qq.com"
                },
                new Author
                {
                    Name = "周三",
                    Gender = "男",
                    Age = 27,
                    Email = "77777777@qq.com"
                }
            };
            _dbContext.Set<Author>().AddRange(authors);
            return _dbContext.SaveChanges();
        }
    }
}

这三种方法都可以实现批量添加实体的功能,它们都会在后台生成3SQL

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Author] ([Age], [Email], [Gender], [Name])
VALUES (@p0, @p1, @p2, @p3);
SELECT [Id]
FROM [Author]
WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 int,@p1 nvarchar(30),@p2 nvarchar(10),@p3 nvarchar(20)',@p0=25,@p1=N'55555555@qq.com',@p2=N'男',@p3=N'周一'
exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Author] ([Age], [Email], [Gender], [Name])
VALUES (@p0, @p1, @p2, @p3);
SELECT [Id]
FROM [Author]
WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 int,@p1 nvarchar(30),@p2 nvarchar(10),@p3 nvarchar(20)',@p0=26,@p1=N'66666666@qq.com',@p2=N'女',@p3=N'周二'
exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Author] ([Age], [Email], [Gender], [Name])
VALUES (@p0, @p1, @p2, @p3);
SELECT [Id]
FROM [Author]
WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 int,@p1 nvarchar(30),@p2 nvarchar(10),@p3 nvarchar(20)',@p0=27,@p1=N'77777777@qq.com',@p2=N'男',@p3=N'周三'

5、使用事务添加实体

我们也可以通过开启一个事务的方式来实现添加实体的功能,代码如下:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            using (var transaction = _dbContext.Database.BeginTransaction())
            {
                try
                {
                    _dbContext.Set<Author>().Add(new Author
                    {
                        Name = "周一",
                        Gender = "男",
                        Age = 25,
                        Email = "55555555@qq.com"
                    });

                    _dbContext.Set<Author>().Add(new Author
                    {
                        Name = "周二",
                        Gender = "女",
                        Age = 26,
                        Email = "66666666@qq.com"
                    });

                    _dbContext.Set<Author>().Add(new Author
                    {
                        Name = "周三",
                        Gender = "男",
                        Age = 27,
                        Email = "77777777@qq.com"
                    });

                    _dbContext.SaveChanges();
                    _dbContext.Database.CommitTransaction();
                    return 1;
                }
                catch
                {
                    _dbContext.Database.RollbackTransaction();
                    return 0;
                }
            }
        }
    }
}

与上面批量添加实体的结果一样,后台会生成3SQL

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Author] ([Age], [Email], [Gender], [Name])
VALUES (@p0, @p1, @p2, @p3);
SELECT [Id]
FROM [Author]
WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 int,@p1 nvarchar(30),@p2 nvarchar(10),@p3 nvarchar(20)',@p0=25,@p1=N'55555555@qq.com',@p2=N'男',@p3=N'周一'
exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Author] ([Age], [Email], [Gender], [Name])
VALUES (@p0, @p1, @p2, @p3);
SELECT [Id]
FROM [Author]
WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 int,@p1 nvarchar(30),@p2 nvarchar(10),@p3 nvarchar(20)',@p0=26,@p1=N'66666666@qq.com',@p2=N'女',@p3=N'周二'
exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Author] ([Age], [Email], [Gender], [Name])
VALUES (@p0, @p1, @p2, @p3);
SELECT [Id]
FROM [Author]
WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

',N'@p0 int,@p1 nvarchar(30),@p2 nvarchar(10),@p3 nvarchar(20)',@p0=27,@p1=N'77777777@qq.com',@p2=N'男',@p3=N'周三'

6、SqlBulkCopy添加实体

在实际开发过程中,有时可能需要一次导入几万甚至几十万的数据,这时候如果通过Add结合foreach批量添加,代码的效率会变得非常低。如果是调用AddRange方法,那么每次导入的实体数量也是有限制的,超过这个限制就会导致程序报错。这时我们就可以考虑使用SqlBulkCopy来实现。代码如下所示:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Data;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            // 模拟一个Author集合
            List<Author> authors = new List<Author>();
            Random random = new Random();
            for (int i = 1; i < 10000; i++)
            {
                authors.Add(new Author
                {
                    Name = "Author_" + i.ToString(),
                    Gender = i % 2 == 0 ? "男" : "女",
                    Age = random.Next(20, 50),
                    Email = "00000000@qq.com"
                });
            }

            // 转换为DataTable
            DataTable table = new DataTable();
            table.Columns.Add("Id", typeof(int));
            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Gender", typeof(string));
            table.Columns.Add("Age", typeof(int?));
            table.Columns.Add("Email", typeof(string));
            foreach (Author author in authors)
            {
                DataRow row = table.NewRow();
                row[1] = author.Name;
                row[2] = author.Gender;
                row[3] = author.Age;
                row[4] = author.Email;
                table.Rows.Add(row);
            }

            // 写入数据库
            string connectionString = _dbContext.Database.GetDbConnection().ConnectionString;
            using (SqlBulkCopy bulk = new SqlBulkCopy(connectionString))
            {
                try
                {
                    bulk.DestinationTableName = "Author";
                    bulk.BatchSize = table.Rows.Count;
                    bulk.WriteToServer(table);
                    return 1;
                }
                catch
                {
                    return 0;
                }
            }
        }
    }
}

使用SqlBulkCopy执行批量导入的效率非常高,运行结果如下所示:

在这里插入图片描述

7、Z.EntityFramework.Extensions.EFCore添加实体

如果你在.NET Framework时代就开始接触Entity Framework,那一定听说过Z.EntityFramework的大名,这个扩展类库对于批量操作的支持相当友好。使用NuGet引入该组件,由于项目平台为.NET Core 3.1,因此Z.EntityFramework.Extensions.EFCore的版本选择3.18.0即可。

Z.EntityFramework.Extensions.EFCore

在这里插入图片描述
批量导入的代码如下所示:

using App.Context;
using App.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;

namespace App.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        protected readonly DaoDbContext _dbContext;

        public AuthorController(DaoDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        [HttpGet]
        public ActionResult<int> Add()
        {
            // 模拟一个Author集合
            List<Author> authors = new List<Author>();
            Random random = new Random();
            for (int i = 1; i < 10000; i++)
            {
                authors.Add(new Author
                {
                    Name = "Author_" + i.ToString(),
                    Gender = i % 2 == 0 ? "男" : "女",
                    Age = random.Next(20, 50),
                    Email = "00000000@qq.com"
                });
            }

            // 批量导入
            try
            {
                _dbContext.BulkInsert(authors);
                return 1;
            }
            catch
            {
                return 0;
            }
        }
    }
}

使用Z.EntityFramework.Extensions.EFCore批量导入的速度也非常快,运行结果如下所示:

在这里插入图片描述

8、结语

本文主要介绍了EFCore中添加实体的相关操作。在实际开发过程中,如果需要添加的实体集合的数据量较大,可以考虑使用SqlBulkCopyZ.EntityFramework.Extensions.EFCore来实现实体的批量添加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式之模版方法模式

Template method design pattern 模版方法模式的概念、模版方法模式的结构、模版方法模式的优缺点、模版方法模式的使用场景、模版方法模式的实现示例、模版方法模式的源码分析 1、模版方法模式的概念 模版方法模式&#xff0c;即定义一个算法骨架&#xff0c;而将一些步骤延迟…

ARM——指令集仿真环境搭建

目录 一、ARM指令集仿真环境搭建 1.1指令和指令集 指令 指令集 1.2汇编的本质 汇编 C语言 1.3为什么学习汇编 1.4仿真 硬件仿真 软件仿真 1.5Keil 1.6环境搭建 1.7汇编工程创建 二、汇编 2.1汇编中的符号 2.2ARM指令集 2.3简单的ARM程序 一、ARM指令集仿真环境搭…

Cyanine5 NHS ester |分子量:616.19|分子式:C36H42ClN3O4

Cyanine5 NHS ester |分子量&#xff1a;616.19|分子式&#xff1a;C36H42ClN3O4 外观&#xff1a;暗蓝色粉末 分子量&#xff1a;616.19 分子式&#xff1a;C36H42ClN3O4 溶解性&#xff1a;易溶于有机溶剂&#xff08;DMF,DMSO和氯化物&#xff09;&#xff0c;难溶于水 …

Mob社会化分享集成ShareSDK

如何在项目已经集成 SMSSDK 的情况下集成 ShareSDk 到项目中&#xff0c;需要使用创建 module 的方式引入 ShareSDk&#xff0c;主要内容如下&#xff1a; 1.下载ShareSDK 2.引入 ShareSDK 3.创建 MainLibs Module 4.创建 OneKeyShare Module 5.在项目中引入 Module 6.配…

Unity Addressables资源管理 主设置面板

Addressables资源管理总目录 0.主设置菜单位置 位置1 位置2 1.Profiles 路径配置选项 这个是全局路径配置的选择 可以点击 Manager Profiles 打开路径配置面板 打包路径设置 2.Diagnostics 诊断设置 Send Profiler Events 打开这个选项&#xff0c;才能在Event Viewer窗口…

记录java枚举类在数据库、前后端交互时的序列化方式

实体类枚举属性持久化到数据库 1.EnumValue 2.配置 mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler 或 mybatis-plus:typeEnumsPackage: xxx 实体类中枚举属性自动转为EnumValue标记的属性值 从数据…

C++数学与算法系列之排列和组合

1. 前言 本文将聊聊排列和组合&#xff0c;排列组合是组合学最基本的概念&#xff0c;在程序运用中也至关重要。 排列问题&#xff1a;指从给定个数的元素中取出指定个数的元素进行排序。 组合问题&#xff1a;指从给定个数的元素中仅仅取出指定个数的元素&#xff0c;不排序…

Docker镜像

镜像是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等)&#xff0c;这个打包好的运行环境就是image镜像文件。 只有通过这…

【设计模式】工厂方法模式Factory(Java)

文章目录1. 定义2. 类图3. Java实现案例3.1 抽象类&#xff1a;Pizza和PizzaStore3.2 具体披萨&#xff1a;北京两种上海两种共四种3.3 具体披萨店&#xff1a;北京店和上海店3.4 测试主方法1. 定义 工厂方法模式定义了一个创建对象的接口&#xff0c;但由子类决定要实例化的类…

基于JAVA的XX公司固定资产管理系统的设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 本课题研究对象是中小企业财务管理系统&#xff0c;设计采用自己开发实践和所学知 识&#xff0c;系统部分主要分为以下…

汽车主机厂Adams/Car悬架动力学开发最全攻略

​​​​​​​一、写在前面 实际经历告诉我们&#xff0c;当我们接触一个新事物或学习一项新的技能时&#xff0c;入门往往是最为困难的&#xff0c;迷茫、彷徨、无助…… 正是基于同样的经历&#xff0c;在掌握Adams/Car软件的应用后&#xff0c;作者即开始构思如何将自己的…

论文投稿指南——中文核心期刊推荐(电工技术)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

linux后台自定义后台服务service(已filebeat举例)

文章目录一、配置攥写1&#xff09;安装filebeat和配置相关修改2&#xff09;常用命令二、启动顺序1&#xff09;命令循序2&#xff09;systemctl添加自定义系统服务&#xff08;服务填写指南&#xff09;3&#xff09;linux的systemctl命令详解及使用教程三、遇到的坑点和报错…

One-Hot 独热编码

1. 什么是独热编码 独热编码&#xff0c;又称一位有效编码。采用N位状态寄存器来对N个状态进行编码&#xff0c;直观来说就是有多少个状态就有多少比特&#xff0c;除了有效的比特为1外&#xff0c;其他都为0. 2. 独热编码过程 &#xff08;1&#xff09;将分类值映射到整数…

Simulcast与SVN

什么是Simulcast: 一个客户端向服务器发送高清&#xff0c;标清&#xff0c;低清三种视频流&#xff0c;服务器根据其他接收客户端的带宽情况分发不同的视频流。Simulcast不仅有客户端的工作&#xff0c;还有服务器的工作。 开启Simulcast的三种方式: Munging SDP方式 添加assr…

网络实验①——同Vlan下相互通信

实验要求&#xff1a; pc0与pc1互通pc2与pc3互通实验步骤&#xff1a; A交换机配置&#xff1a; enable config t hostname switch-A vlan 10 vlan 20 exit interface f0/1 switch access vlan 10 no shutdown interface f0/2 switch access vlan 20 no shutdown interface f0/…

无线耳机哪个品牌好一点?真无线蓝牙耳机推荐品牌

蓝牙耳机随着近几年的快速发展&#xff0c;已经成为了人们外出时必不可少的数码产品之一。而现如今&#xff0c;市面上的蓝牙耳机品牌众多&#xff0c;挑选起来让人眼花缭乱&#xff0c;人们在选择时不免陷入纠结。那么&#xff0c;无线耳机哪个品牌好一点&#xff1f;下面&…

day23【代码随想录】翻转二叉树、对称二叉树、相同的树、另一棵树的子树、完全二叉树的结点个数

文章目录前言一、翻转二叉树&#xff08;力扣226&#xff09;1、递归法1、使用前序遍历2、使用后序遍历2、迭代法1、层序遍历二、对称二叉树&#xff08;力扣101&#xff09;三、相同的树&#xff08;力扣100&#xff09;四、另一棵树的子树&#xff08;力扣572&#xff09;五、…

[附源码]Nodejs计算机毕业设计教师信息采集系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

docker容器中DPDK对网卡SR-IOV支持实验

主要是验证下容器运行DPDK&#xff0c;如何对SR-IOV进行支持 1 VF创建方法 在未开启SR-IOV时&#xff0c;通过DPDK提供的./dpdk-devbind.py脚本可知&#xff0c;当前系统一共有一块82599网卡&#xff0c;拥有2个网口&#xff0c;PCI的地址是18:00.0和18:00.1,如下图所示 启用…