Пример #1
0
        private static async Task Seed(IDataContextSeeder <IdentityDataContext> seeder, IServiceScope scope)
        {
            var assembly    = typeof(IdentityDataContext).Assembly;
            var hosting     = scope.ServiceProvider.GetRequiredService <IHostingEnvironment>();
            var environment = hosting.EnvironmentName;

            await seeder.SeedAsync <ApiResource, IdentityServer4.EntityFramework.Entities.ApiResource>(
                assembly,
                $"NativeCode.Node.Identity.Seeding.{environment}.ApiResource.json",
                (model, dbset) => dbset.SingleOrDefaultAsync(x => x.Name == model.Name),
                (model, dbset) => Task.FromResult(model.ToEntity()));

            await seeder.SeedAsync <Client, IdentityServer4.EntityFramework.Entities.Client>(
                assembly,
                $"NativeCode.Node.Identity.Seeding.{environment}.Client.json",
                (model, dbset) => dbset.SingleOrDefaultAsync(x => x.ClientId == model.ClientId),
                (model, dbset) => Task.FromResult(model.ToEntity()));

            await seeder.SeedAsync <IdentityResource, IdentityServer4.EntityFramework.Entities.IdentityResource>(
                assembly,
                "NativeCode.Node.Identity.Seeding.IdentityResource.json",
                (model, dbset) => dbset.SingleOrDefaultAsync(x => x.Name == model.Name),
                (model, dbset) => Task.FromResult(model.ToEntity()));

            await seeder.SaveChangesAsync();

            await seeder.SeedAsync <UserInfo, User>(
                assembly,
                $"NativeCode.Node.Identity.Seeding.{environment}.User.json",
                (model, dbset) => dbset.SingleOrDefaultAsync(x => x.Email == model.Email),
                async (model, dbset) =>
            {
                using (var inner = scope.ServiceProvider.CreateScope())
                    using (var users = inner.ServiceProvider.GetRequiredService <UserManager <User> >())
                    {
                        var user = new User
                        {
                            Email          = model.Email,
                            EmailConfirmed = model.EmailConfirmed,
                            UserName       = model.UserName,
                        };

                        var result = await users.CreateAsync(user, model.Password);

                        if (result.Succeeded == false)
                        {
                            throw new AggregateException(result.Errors.Select(x => new InvalidOperationException(x.Description)));
                        }

                        return(await dbset.FindAsync(user.Id));
                    }
            });
        }