Asp.net core3.0 web api Migration通过种子将数据写入数据库的方法步骤

发布时间:2021-10-14 09:55:09 作者:iii
来源:亿速云 阅读:159
# Asp.net Core 3.0 Web API Migration通过种子将数据写入数据库的方法步骤

在开发ASP.NET Core Web API应用程序时,经常需要在数据库初始化时预置一些基础数据(如系统配置、默认用户等)。通过Entity Framework Core的Migration机制结合数据种子(Data Seeding)功能可以优雅地实现这一需求。本文将详细介绍在ASP.NET Core 3.0中实现这一功能的完整步骤。

## 一、环境准备

1. 创建ASP.NET Core 3.0 Web API项目
   ```bash
   dotnet new webapi -n SeedDataDemo
  1. 添加EF Core相关NuGet包
    
    dotnet add package Microsoft.EntityFrameworkCore
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
    dotnet add package Microsoft.EntityFrameworkCore.Design
    

二、配置DbContext

  1. 创建实体模型(示例为Product)

    public class Product
    {
       public int Id { get; set; }
       public string Name { get; set; }
       public decimal Price { get; set; }
    }
    
  2. 创建DbContext并重写OnModelCreating方法

    public class AppDbContext : DbContext
    {
       public DbSet<Product> Products { get; set; }
    
    
       public AppDbContext(DbContextOptions<AppDbContext> options)
           : base(options) { }
    
    
       protected override void OnModelCreating(ModelBuilder modelBuilder)
       {
           // 种子数据配置
           modelBuilder.Entity<Product>().HasData(
               new Product { Id = 1, Name = "商品A", Price = 99.99m },
               new Product { Id = 2, Name = "商品B", Price = 199.99m }
           );
       }
    }
    

三、配置数据库连接

在Startup.cs中配置服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    
    services.AddControllers();
}

四、创建并应用Migration

  1. 创建初始Migration

    dotnet ef migrations add InitialCreate
    
  2. 应用Migration到数据库

    dotnet ef database update
    

五、验证种子数据

  1. 通过SQL Server Management Studio查询数据库

    SELECT * FROM Products
    
  2. 或通过API控制器验证:

    [HttpGet]
    public async Task<IActionResult> GetProducts()
    {
       return Ok(await _context.Products.ToListAsync());
    }
    

六、高级种子场景

对于复杂种子数据(如依赖关系数据),可以使用单独的服务类:

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using var context = new AppDbContext(
            serviceProvider.GetRequiredService<DbContextOptions<AppDbContext>>());
        
        if (!context.Products.Any())
        {
            context.Products.AddRange(
                new Product { Id = 3, Name = "商品C", Price = 299.99m },
                new Product { Id = 4, Name = "商品D", Price = 399.99m }
            );
            context.SaveChanges();
        }
    }
}

在Program.cs中调用:

public static void Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();
    
    using (var scope = host.Services.CreateScope())
    {
        SeedData.Initialize(scope.ServiceProvider);
    }
    
    host.Run();
}

七、注意事项

  1. 种子数据仅在没有数据时插入(通过Any()检查)
  2. 生产环境应考虑使用更安全的部署方案
  3. 复杂数据关系需要按正确顺序插入

通过以上步骤,我们实现了在ASP.NET Core 3.0 Web API中通过Migration机制初始化数据库并插入种子数据的功能。这种方法既保持了代码的可维护性,又能确保数据库结构的版本控制。 “`

推荐阅读:
  1. ASP.NET 5系列教程 (二):Hello World
  2. ASP.NET样板开发框架ABP怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

asp.net

上一篇:impress.js表现层框架的示例分析

下一篇:窗口过程函数WindowProc和DefWindowProc函数是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》