用.NET生成数据库的方法步骤
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇内容介绍了"用.NET生成数据库的方法步骤"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开篇语本
千家信息网最后更新 2025年11月08日用.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(DbContextOptions options) : 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安全错误
数据库的锁怎样保障安全
温州数据库led长屏显示屏
中金数据库报告
php 查看服务器
软件开发部部门组建都需要什么
网络工程和网络安全有什么分别
东营软件开发工资
魔兽服务器登入不了
balst本地数据库构建
服务器或dns错误怎么处理
天津锐捷网络技术
公安信息网络安全专项整治
互联网金融科技公司的优势
服务器的专网无法访问
亚马逊怎么获取大数据库
信息与网络安全基础期末考试
明日服务器合区
思普嘉网络技术
数据库GTM
网络安全教育视频班会
网络安全基金排行
数据库应用的优势
软件开发费和服务费入账
jar找不到连接数据库的驱动
数据库怎么定义操作符表
larveral链接数据库
数据库主从分离的好处
北京通用软件开发配置
jsp 添加文档到数据库
网络安全目标工作包括
网暴算不算网络安全