播种.Net Core

时间:2017-02-28 11:55:21

标签: c# asp.net database asp.net-core

我目前正在构建一个使用迁移的.NET核心Identity Server应用程序,并想知道在.NET核心方面播放数据库的最佳方法是什么。

目前我有一个在启动时调用的DbInitializer类(见下文),但是想知道我是否应该这样做作为迁移?

  public static void Seed(IApplicationBuilder applicationBuilder)
    {
        ConfigurationDbContext context =
            applicationBuilder.ApplicationServices.GetRequiredService<ConfigurationDbContext>();
        IConfiguration oConfig =
            applicationBuilder.ApplicationServices.GetRequiredService<IConfiguration>();

        string sSeedingConfig = GetSeedingConfiguration(oConfig);

        SeedConfigurationDb(ref context, sSeedingConfig);
    }

    private static void SeedConfigurationDb(ref ConfigurationDbContext oContext, string sSeedingConfig)
    {
        if (!oContext.ApiResources.Any())
        {
            var oApis = GetSeedingConfigElements(sSeedingConfig, "Apis");
            List<ApiResource> lApis = null;
            if (oApis != null)
            {
                lApis = JsonConvert.DeserializeObject<List<ApiResource>>(oApis.ToString());
            }
            if (lApis != null)
            {
                foreach (var api in lApis)
                {
                   oContext.ApiResources.Add(api.ToEntity());
                }
            }
        }

        if (!oContext.Clients.Any())
        {
            var oClients = GetSeedingConfigElements(sSeedingConfig, "Clients");
            List<Client> lClients = null;
            if (oClients != null)
            {
                lClients = JsonConvert.DeserializeObject<List<Client>>(oClients.ToString());
            }
            if (lClients != null)
            {
                foreach (var client in lClients)
                {
                    oContext.Clients.Add(client.ToEntity());
                }
            }
        }

        if (!oContext.IdentityResources.Any())
        {
            var oIdentityResources = GetSeedingConfigElements(sSeedingConfig, "IdentityResources");
            List<IdentityResource> lIdentityResources = null;
            if (oIdentityResources != null)
            {
                lIdentityResources = JsonConvert.DeserializeObject<List<IdentityResource>>(oIdentityResources.ToString());
            }
            if (lIdentityResources != null)
            {
                foreach (var identityresource in lIdentityResources)
                {
                    oContext.IdentityResources.Add(identityresource.ToEntity());
                }
            }
        }

        oContext.SaveChanges();
    }

1 个答案:

答案 0 :(得分:4)

启用迁移后,您将获得一个名为&#34; Configuration&#34;的类文件。此类有一个种子方法,每次通过迁移更新数据库时都会运行该方法。

因此,您可以在那里播种初始更新,然后将其注释掉。