用一些数据(用户,发票等)填充数据库

时间:2020-02-19 10:17:44

标签: asp.net-core entity-framework-core seeding

我想用一些数据填充我的数据库,以使前端开发人员可以开始使用我的API。我不希望这些数据投入生产,因此,我不认为它属于“种子数据”类别。对我来说,种子数据是进入生产并且需要在我的应用程序启动之前进入数据库的数据。例如国家列表等。

就我而言,我想添加一些用户,一些链接到用户的发票,一些产品等。如果在开发阶段进行部署时做到这一点,那就太好了。

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

在您的启动类上,您将要根据环境(是否在开发中)进行检查,并调用适当的种子方法。

要检查的命令。

SELECT
    TYP.NAME   AS SILO_NAME,
    TR.DEVID,
    TR.NAME    AS DEV_NAME,
    MAX(TS.TEMP) AS MAX_TEMP --"Lowest salary" -- just changed the name, not necessary in your case
FROM
    HANGINGTHREAD_SILO EV
    LEFT JOIN SILO TYP ON EV.ID_SILO = TYP.ID
    LEFT JOIN IOT_DEVICES TR ON EV.DEVICES_ID = TR.ID
    LEFT JOIN SILO_SENSOR SS ON SS.DEVICES_ID = TR.DEVID -- added this left join as JOIN of TS with it is not correct in your query
    LEFT JOIN TEMPR_SILO TS ON TS.NAME = SS.NAME -- added this join condition
                               AND TS.ID_TRANS IN (
        SELECT
            MAX(ID_TRANS)
        FROM
            TEMPR_SILO
    )
GROUP BY
    EV.ID,
    TYP.NAME, --as Silo_name, -- "as" is not allowed here
    TR.DEVID,
    TR.NAME; -- as dev_name -- "as" is not allowed here

对于此任务,我将创建一个单独的项目来完成该任务,而我只会在其中播种数据。这完全取决于您的体系结构。

答案 1 :(得分:0)

如果将环境设置为“开发”,我将创建DataInitializer类以播种所有需要的数据。

例如创建用户:

    public static class IdentityDataInitializer
{
    private static void SeedUsers(UserManager<ApplicationUser> userManager)
    {
        if (userManager.FindByNameAsync("Admin").Result == null)
        {
            ApplicationUser admin = new ApplicationUser()
            {
                UserName = "Admin",
                Email = "Admin@admin.com",
                RegistrationDate = DateTime.Now
            };

            string password = "Admin1";

            var result = userManager.CreateAsync(admin, password);

            if (result.Result.Succeeded)
            {
                userManager.AddToRoleAsync(admin, "Admin").Wait();
            }
        }
    }
}

所有方法都准备就绪后,只需将其添加到您的Startup.cs中即可:

        public void Configure(
        IApplicationBuilder app,
        IWebHostEnvironment env,
        UserManager<ApplicationUser> userManager,
        RoleManager<IdentityRole> roleManager)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            IdentityDataInitializer.SeedDefaultData(userManager, roleManager);
        }

        //Some methods...
    }
}
相关问题