.NET数据库生成全解

本次事例代码是用过vs2019创建的ASP.NET Core Web API项目
可以通过可视化界面创建或者通过命令行创建
dotnet new webapi -o Net5ByDocker
创建实体类

安装组件


增加实体类
[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<User> 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
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<OpenDbSend>();
                log.LogError(ex.Message);
                await SeedAsync(dbContext, loggerFactory, retryForAvaila
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值