我的编程空间,编程开发者的网络收藏夹
学习永远不晚

用.NET生成数据库的方法步骤

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

用.NET生成数据库的方法步骤

本篇内容介绍了“用.NET生成数据库的方法步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

用.NET生成数据库的方法步骤

开篇语

本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用EFCore作为ORM框架。

本次示例环境:vs2019、net5、mysql

创建项目

本次事例代码是用过vs2019创建的ASP.NET Core Web API项目

可以通过可视化界面创建或者通过命令行创建

dotnet new webapi -o Net5ByDocker

创建实体类

安装连接MySQL数据库组件

<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.0" />     <PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Json.Newtonsoft" Version="5.0.0" />

增加实体类

[Table("user")]   public class User   {       public User()       {           Id = Guid.NewGuid().ToString();       }        public User(string account, string password, string creater) : this()       {           Account = account;           Password = password;           Deleted = false;           SetCreater(creater);       }        [Key]       [Comment("主键")]       [StringLength(36)]       [Required]       public string Id { get; private set; }        [Comment("帐号")]       [StringLength(36)]       [Required]       public string Account { get; private set; }        [Comment("密码")]       [StringLength(36)]       [Required]       public string Password { get; private set; }        [Comment("余额")]       [Column(TypeName = "decimal(18, 2)")]       [Required]       public decimal Money { get; set; }        [Comment("是否删除")]       [Column(TypeName = "tinyint(1)")]       [Required]       public bool Deleted { get; private set; }        [Comment("创建人")]       [StringLength(20)]       [Required]       public string Creater { get; private set; }        [Comment("创建时间")]       [Required]       public DateTime CreateTime { get; private set; }        [Comment("修改人")]       [StringLength(20)]       [Required]       public string Modifyer { get; private set; }        [Comment("修改时间")]       [Required]       public DateTime ModifyTime { get; private set; }        public void SetCreater(string name)       {           Creater = name;           CreateTime = DateTime.Now;           SetModifyer(name);       }        public void SetModifyer(string name)       {           Modifyer = name;           ModifyTime = DateTime.Now;       }   }

这种只是增加实体类类型的一种方式,可能这种看着比较乱,还可以通过OnModelCreating实现,详情看参考文档

增加数据库上下文OpenDbContext

public class OpenDbContext : DbContext     {         public OpenDbContext(DbContextOptions<OpenDbContext> options)             : base(options)         {         }          public DbSet<User> Users { get; set; }     }

Startup注入连接数据库操作

var connection = Configuration["DbConfig:Mysql:ConnectionString"];             var migrationsAssembly = IntrospectionExtensions.GetTypeInfo(typeof(Startup)).Assembly.GetName().Name;             services.AddDbContext<OpenDbContext>(option => option.UseMySql(connection, ServerVersion.AutoDetect(connection), x =>             {                 x.UseNewtonsoftJson();                 x.MigrationsAssembly(migrationsAssembly);             }));

生成迁移文件

引用组件

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.5"> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.5">

迁移命令

add-migration Init

结果

用.NET生成数据库的方法步骤

image.png

要看下生成的迁移文件是否是自己预期的那样子,也可以在这一步就生成数据库,命令:Update-Database

数据种子

增加OpenDbSend类,添加数据种子

public class OpenDbSend  {      /// <summary>      /// 生成数据库以及数据种子      /// </summary>      /// <param name="dbContext">数据库上下文</param>      /// <param name="loggerFactory">日志</param>      /// <param name="retry">重试次数</param>      /// <returns></returns>      public static async Task SeedAsync(OpenDbContext dbContext,          ILoggerFactory loggerFactory,          int? retry = 0)      {          int retryForAvailability = retry.Value;          try          {              dbContext.Database.Migrate();//如果当前数据库不存在按照当前 model 创建,如果存在则将数据库调整到和当前 model 匹配              await InitializeAsync(dbContext).ConfigureAwait(false);               //if (dbContext.Database.EnsureCreated())//如果当前数据库不存在按照当前 model创建,如果存在则不管了。              //  await InitializeAsync(dbContext).ConfigureAwait(false);          }          catch (Exception ex)          {              if (retryForAvailability < 3)              {                  retryForAvailability++;                  var log = loggerFactory.CreateLogger<OpenDbSend>();                  log.LogError(ex.Message);                  await SeedAsync(dbContext, loggerFactory, retryForAvailability).ConfigureAwait(false);              }          }      }       /// <summary>      /// 初始化数据      /// </summary>      /// <param name="context"></param>      /// <returns></returns>      public static async Task InitializeAsync(OpenDbContext context)      {          if (!context.Set<User>().Any())          {              await context.Set<User>().AddAsync(new User("azrng", "123456", "azrng")).ConfigureAwait(false);              await context.Set<User>().AddAsync(new User("张三", "123456", "azrng")).ConfigureAwait(false);          }          await context.SaveChangesAsync().ConfigureAwait(false);      }  }

设置项目启动时候调用

public static async Task Main(string[] args)        {            var host = CreateHostBuilder(args).Build();            using (var scope = host.Services.CreateScope())            {                var services = scope.ServiceProvider;                var loggerFactory = services.GetRequiredService<ILoggerFactory>();                var _logger = loggerFactory.CreateLogger<Program>();                try                {                    var openContext = services.GetRequiredService<OpenDbContext>();                    await OpenDbSend.SeedAsync(openContext, loggerFactory).ConfigureAwait(false);                }                catch (Exception ex)                {                    _logger.LogError(ex, $"项目启动出错  {ex.Message}");                }            }             await host.RunAsync().ConfigureAwait(false);        }

生成数据库

启动项目,自动生成数据库

用.NET生成数据库的方法步骤

image.png

表结构如下

用.NET生成数据库的方法步骤

image.png

如果后期数据库字段或者结构有变动,可以再次生成迁移文件然后生成数据库

查询数据

/// <summary> /// 用户接口 /// </summary> public interface IUserService {     string GetName();      /// <summary>     /// 查询用户信息     /// </summary>     /// <param name="account"></param>     /// <returns></returns>     Task<User> GetDetailsAsync(string account); }  /// <summary> /// 用户实现 /// </summary> public class UserService : IUserService {     private readonly OpenDbContext _dbContext;      public UserService(OpenDbContext dbContext)     {         _dbContext = dbContext;     }      public string GetName()     {         return "AZRNG";     }      ///<inheritdoc cref="IUserService.GetDetailsAsync(string)"/>     public async Task<User> GetDetailsAsync(string account)     {         return await _dbContext.Set<User>().FirstOrDefaultAsync(t => t.Account == account).ConfigureAwait(false);     } }

一般更推荐建立指定的返回Model类,然后只查询需要的内容,不直接返回实体类

控制器方法

/// <summary> /// 查询用户详情 /// </summary> /// <param name="account"></param> /// <returns></returns> [HttpGet] public async Task<ActionResult<User>> GetDetailsAsync(string account) {     return await _userService.GetDetailsAsync(account).ConfigureAwait(false); }

查询结果

{   "id": "e8976d0a-6ee9-4e2e-b8d8-1fe6e85b727b",   "account": "azrng",   "password": "123456",   "money": 0,   "deleted": false,   "creater": "azrng",   "createTime": "2021-05-09T15:48:45.730302",   "modifyer": "azrng",   "modifyTime": "2021-05-09T15:48:45.730425" }

“用.NET生成数据库的方法步骤”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

用.NET生成数据库的方法步骤

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#连接MySQL数据库的方法步骤

最近两天在解决C#连接MySql数据库的问题,通过不同的从网上学习,最终找到了解决的办法,下面这篇文章主要给大家介绍了关于C#连接MySQL数据库的方法步骤,需要的朋友可以参考下
2023-01-11

使用openssl 生成免费证书的方法步骤

一:什么是openssl 它的作用是?应用场景是什么? 即百度百科说:openssl是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,它可以避免信息被窃听到。 SSL是Secure Sockets Layer(安全套接层协议
2022-06-04

用Python生成合成数据的方法

Python是当下最流行的计算机语言之一,尤其是在数据领域。Python可以使用三个库来生成合成数据1、Scikit-learnScikit-learn是用于机器学习任务的最广泛使用的Python库之一,提供了几乎经典算法的实现,可以
用Python生成合成数据的方法
2024-01-22

Python使用sqlite3第三方库读写SQLite数据库的方法步骤

目录1 数据概览2 任务定义3www.cppcns.com 实现步骤3.1 利用pandas读取学生信息3.2 利用sqlite3创建数据库和学生表3.3 利用sqlite3将学生信息存入数据库3.4 将李四数学成绩70录入SQLite数据
2022-07-04

阿里云数据库生成数据字典的方法

简介:本文将详细介绍如何使用阿里云数据库工具生成数据字典。包括数据字典的定义,生成数据字典的重要性,以及在阿里云数据库中生成数据字典的具体步骤和方法。数据字典的定义数据字典是一种用于描述数据和数据之间的关系的工具。它通常包含以下信息:数据类型、数据长度、数据范围、数据的约束条件、数据的默认值、数据的参考关系等。数据字典
阿里云数据库生成数据字典的方法
2024-01-25

织梦dedecms数据库类$dsql使用方法步骤

dedecms的数据库操作类,非常实用,在二次开发中尤其重要,这个数据库操作类说明算是奉献给大家的小礼物了。 引入common.inc.php文件复制代码代码如下:require_once (dirname(__FILE__) . "/in
2022-06-12

Android集成GreenDao数据库的操作步骤

这篇文章主要介绍了Android集成GreenDao数据库,使用数据库存储时候,一般都会使用一些第三方ORM框架,比如GreenDao,本文分几步给大家介绍Android集成GreenDao数据库的方法,需要的朋友可以参考下
2022-11-13

使用Docker搭建MySQL主从数据库的方法步骤

目录1. 准备主服务器2. 准备从服务器3. 启动主从同步4. 实现主从同步5. 停止和重置很多人对主从数据库有一个误区,把多个mysql搭建在同一个服务器上,性能提升是不是很有限?这个理念是错误的,数据库的性能瓶颈主要是在IO和CPU负载
2023-01-11

Oracle(88)监控数据库性能的方法步骤

目录引言主要监控指标使用oracle工具进行性能监控1. Automatic Workload Repository (AWR)2. Active Session History (ASH)3. 动态性能视图(V$视图)自动化性能监控总结引
Oracle(88)监控数据库性能的方法步骤
2024-08-29

.NET Core使用EF生成数据库出错怎么解决

这篇文章主要介绍“.NET Core使用EF生成数据库出错怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.NET Core使用EF生成数据库出错怎么解决”文章能帮助大家解决问题。在.NET
2023-06-26

编程热搜

目录