用.NET生成数据库的方法步骤
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇内容介绍了"用.NET生成数据库的方法步骤"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开篇语本
千家信息网最后更新 2025年02月02日用.NET生成数据库的方法步骤
本篇内容介绍了"用.NET生成数据库的方法步骤"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
开篇语
本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用EFCore作为ORM框架。
本次示例环境:vs2019、net5、mysql
创建项目
本次事例代码是用过vs2019创建的ASP.NET Core Web API项目
可以通过可视化界面创建或者通过命令行创建
dotnet new webapi -o Net5ByDocker
创建实体类
安装连接MySQL数据库组件
增加实体类
[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(DbContextOptionsoptions) : base(options) { } public DbSet Users { get; set; } }
Startup注入连接数据库操作
var connection = Configuration["DbConfig:Mysql:ConnectionString"]; var migrationsAssembly = IntrospectionExtensions.GetTypeInfo(typeof(Startup)).Assembly.GetName().Name; services.AddDbContext(option => option.UseMySql(connection, ServerVersion.AutoDetect(connection), x => { x.UseNewtonsoftJson(); x.MigrationsAssembly(migrationsAssembly); }));
生成迁移文件
引用组件
迁移命令
add-migration Init
结果
image.png
要看下生成的迁移文件是否是自己预期的那样子,也可以在这一步就生成数据库,命令:Update-Database
数据种子
增加OpenDbSend类,添加数据种子
public class OpenDbSend { ////// 生成数据库以及数据种子 /// /// 数据库上下文 /// 日志 /// 重试次数 ///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 (); log.LogError(ex.Message); await SeedAsync(dbContext, loggerFactory, retryForAvailability).ConfigureAwait(false); } } } /// /// 初始化数据 /// /// ///public static async Task InitializeAsync(OpenDbContext context) { if (!context.Set ().Any()) { await context.Set ().AddAsync(new User("azrng", "123456", "azrng")).ConfigureAwait(false); await context.Set ().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(); var _logger = loggerFactory.CreateLogger (); try { var openContext = services.GetRequiredService (); await OpenDbSend.SeedAsync(openContext, loggerFactory).ConfigureAwait(false); } catch (Exception ex) { _logger.LogError(ex, $"项目启动出错 {ex.Message}"); } } await host.RunAsync().ConfigureAwait(false); }
生成数据库
启动项目,自动生成数据库
image.png
表结构如下
image.png
如果后期数据库字段或者结构有变动,可以再次生成迁移文件然后生成数据库
查询数据
////// 用户接口 /// public interface IUserService { string GetName(); ////// 查询用户信息 /// /// ///Task GetDetailsAsync(string account); } /// /// 用户实现 /// public class UserService : IUserService { private readonly OpenDbContext _dbContext; public UserService(OpenDbContext dbContext) { _dbContext = dbContext; } public string GetName() { return "AZRNG"; } ///public async Task GetDetailsAsync(string account) { return await _dbContext.Set ().FirstOrDefaultAsync(t => t.Account == account).ConfigureAwait(false); } }
一般更推荐建立指定的返回Model类,然后只查询需要的内容,不直接返回实体类
控制器方法
////// 查询用户详情 /// /// ///[HttpGet] public async Task > 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生成数据库的方法步骤"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数据
数据库
生成
项目
查询
实体
用户
方法
内容
命令
文件
种子
步骤
上下
上下文
代码
可以通过
时间
更多
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库负载单位是什么意思
软件开发的一些专业术语
网络技术应用 什么是网络
网络安全等级区分
高二网络技术应用选修
崇明区个性化软件开发产品介绍
用路由器自建vpn服务器
女生学通信网络技术
网络安全相关法律法规判断题
山东一站式软件开发费用
饥荒服务器同时开两个存档
win10怎么设置更新服务器
数据库中的表相关联
外文文献数据库大全
阿里网络安全等级保护
新乡网络技术服务
阅甫网络技术有限公司官网
纪念册设计软件开发
国家网络安全领域
超星尔雅网络技术
软件开发的一些专业术语
网络技术应用 什么是网络
计算机信息网络安全与防范
互联网科技行业峰会
选择好的软件开发公司
t6不能登录到服务器
网络数据库可分为几种类型
软件开发配置化
石家庄曙光服务器维修
博山销售软件开发报价