Example #1
0
        private async Task <bool> UpdateLinks <TLink>(MigrationPostgreSqlContext cp,
                                                      IReadOnlyCollection <ToId> newArray
                                                      , DbSet <TLink> links,
                                                      Func <TLink, int> targetId,
                                                      Action <TLink, int> setResult)
            where TLink : class
        {
            foreach (var link in links)
            {
                var toId =
                    newArray.FirstOrDefault(f => f.From == targetId(link));

                if (toId != null && toId.From != toId.To)
                {
                    setResult(link, toId.To);
                }
            }

            await cp.SaveChangesAsync();

            return(true);
        }
        public static void Migrate(this IServiceCollection services, string connectionString, bool dataMigration, IEnumerable <IMigrationDataUpdate> additionalMigrations)
        {
            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new InvalidOperationException("_connectionString is null or empty");
            }

            var dbContextOptions = new DbContextOptionsBuilder <MigrationPostgreSqlContext>();

            dbContextOptions.UseNpgsql(connectionString,
                                       b => b.MigrationsAssembly(typeof(MigrationProviderExtensions)
                                                                 .Assembly.GetName()
                                                                 .Name)
                                       .MigrationsHistoryTable("__MyMigrationsHistory", schema: "migration"));

            using (MigrationPostgreSqlContext myDbContext = new MigrationPostgreSqlContext(dbContextOptions.Options))
            {
                myDbContext.Migrate(new Configuration(additionalMigrations)
                {
                    AutomaticDataMigrationsEnabled = dataMigration
                });
            }
        }