ASP.NetCore添加Migration时只添加1次种子数据
创始人
2024-09-18 07:01:29
0
  1. 首先,在DbContext中添加一个bool类型的属性,用于指示种子数据是否已添加。在下例中,我们将其命名为_isSeeded:
public class ApplicationDbContext : DbContext
{
    private bool _isSeeded;

    public ApplicationDbContext(DbContextOptions options)
        : base(options)
    {
    }

    // Add entities here
    public DbSet Products { get; set; }
    public DbSet Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Map entities to tables
        modelBuilder.Entity().ToTable("Products");
        modelBuilder.Entity().ToTable("Categories");

        // Add seed data here
        if (!_isSeeded)
        {
            modelBuilder.Entity().HasData(
                new Category { Id = 1, Name = "Electronics" },
                new Category { Id = 2, Name = "Clothing" },
                new Category { Id = 3, Name = "Books" }
            );

            modelBuilder.Entity().HasData(
                new Product { Id = 1, Name = "Laptop", Price = 1000m, CategoryId = 1 },
                new Product { Id = 2, Name = "Smartphone", Price = 800m, CategoryId = 1 },
                new Product { Id = 3, Name = "T-shirt", Price = 10m, CategoryId = 2 },
                new Product { Id = 4, Name = "Jeans", Price = 50m, CategoryId = 2 },
                new Product { Id = 5, Name = "The Catcher in the Rye", Price = 5m, CategoryId = 3 }
            );

            _isSeeded = true;
        }
    }
}
  1. 接下来,在Program.cs文件中配置WebHost,并添加以下代码,以在应用程序启动时应用迁移并添加种子数据:
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;
            var context = services.GetRequiredService();

            context.Database.Migrate();

            // Manually apply seed data if not already seeded
            if (!context._isSeeded)
            {
                context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [Categories] ON");
                context.Categories.AddRange(
                    new Category { Id = 1, Name = "Electronics" },
                    new Category { Id = 2, Name

相关内容

热门资讯

6分钟了解!同城跑胡子外 挂安... 6分钟了解!同城跑胡子外 挂安全吗,算番宝典app脚本,教你攻略(有挂方法);1、完成同城跑胡子外 ...
五分钟了解!开心联盟牛牛有外 ... 五分钟了解!开心联盟牛牛有外 挂,yy比鸡辅助软件,技巧教程(有挂揭秘)1、开心联盟牛牛有外 挂机器...
4分钟了解!海南手机麻将有挂的... 4分钟了解!海南手机麻将有挂的么,兴动互娱最强辅助神器,透牌教程(有挂细节);1、实时海南手机麻将有...
8分钟了解!欢乐茶坊辅助器,哈... 8分钟了解!欢乐茶坊辅助器,哈灵有外挂吗,存在挂教程(有挂插件)1、欢乐茶坊辅助器系统规律教程、欢乐...
十分钟了解!雀神小程序辅助ap... 十分钟了解!雀神小程序辅助app,微乐金花辅助器外设,wepoke教程(有挂神器);一、微乐金花辅助...
二分钟了解!闲乐棋牌上分棋牌,... 二分钟了解!闲乐棋牌上分棋牌,皮皮四川麻将攻略,揭秘攻略(有挂规律)1、皮皮四川麻将攻略机器人多个强...
1分钟了解!永和备厅辅助透视,... 1分钟了解!永和备厅辅助透视,开云棋牌会调胜率嘛,攻略教程(有挂攻略);运开云棋牌会调胜率嘛辅助工具...
5分钟了解!胡乐辅助器免费版下... 5分钟了解!胡乐辅助器免费版下载,白金岛红拐弯辅助工具,辅助教程(有挂辅助挂)1、不需要AI权限,帮...
8分钟了解!小猪对对碰麻将有没... 8分钟了解!小猪对对碰麻将有没有挂,潘潘讲故事有没有挂,透明教程(有挂普及)亲,关键说明,小猪对对碰...
9分钟了解!浙衢麻将到底有没有... 9分钟了解!浙衢麻将到底有没有挂,皮皮跑胡子吗,科技教程(有挂神器);1、9分钟了解!浙衢麻将到底有...