实体框架核心种子数据

时间:2018-12-27 13:06:06

标签: c# .net-core entity-framework-core

所以我有一个实体框架核心优先数据库和一个.Net核心应用程序。

我想在创建数据库时向其添加种子数据。我知道FluentAPI具有HasData方法,但这不是我想要的。

创建数据库后,我想使用随机生成的密码(每次都不同)创建一个用户,该密码将保存在服务器中的文件中。

我不能使用HasData方法,因为它每次都会创建相同的密码。

所以我的问题是:除了HasData方法之外,还有其他方法可以将Seed数据添加到Entity Framework Core Code First数据库

2 个答案:

答案 0 :(得分:2)

是的!有一种方法!您可以执行以下操作:

public static class DatabaseInitializer
{
    public static void Initialize(YourDbContext dbContext)
    {
        dbContext.Database.EnsureCreated();
        if (!dbContext.Users.Any())
        {
            // Write you necessary to code here to insert the User to database and save the the information to file.

        }

    }
}

Configure类的Startup方法中的,如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, YourDbContext dbContext)
{
   // other configurations
   ..............

   DatabaseInitializer.Initialize(dbContext);

   ..............
   // other configurations
}

Initialize方法在应用程序启动期间仅被调用一次。

答案 1 :(得分:0)

创建一个DataSeeder类,并在其中注入DbContext。 编写seedData方法以插入所需的数据。这将是自定义逻辑。

您可以在创建数据库后运行此代码。

public class DataSeeder
{
    public static void SeedRandomPassword(YourDbContext context)
    {
            //// your custom logic to generate random password 
            //// set it to right user


            context.Users.Add();  // Or Update depending on what you need
            context.SaveChanges();
        }
    }
}