本篇内容介绍了“用.NET生成数据库的方法步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、做网站、日照网络推广、成都小程序开发、日照网络营销、日照企业策划、日照品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供日照建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
开篇语
本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用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  {      ///       /// 生成数据库以及数据种子      ///        /// 数据库上下文      /// 日志      /// 重试次数      /// ();                  log.LogError(ex.Message);                  await SeedAsync(dbContext, loggerFactory, retryForAvailability).ConfigureAwait(false);              }          }      }       ///       /// 初始化数据      ///        ///       /// ().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生成数据库的方法步骤”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
当前文章:用.NET生成数据库的方法步骤
URL地址:http://www.scyingshan.cn/article/pesppj.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 
