예제 #1
0
 private Easy.Version GetDbVersion(DbContext dbContext)
 {
     Easy.Version version = null;
     try
     {
         version = dbContext.Set <DBVersion>().Find(DBVersionRecord);
     }
     catch (Exception ex)
     {
         _logger.LogInformation("Getting database version failed. {0}", ex.Message);
     }
     if (version == null)
     {
         version = Easy.Version.Parse(_dbVersionOption.Value.BaseVersion);
     }
     return(version);
 }
예제 #2
0
        private IEnumerable <string> ReadRemoteScripts(Easy.Version versionFrom, Easy.Version versionTo)
        {
            List <string>  sqlScripts     = new List <string>();
            ReleaseVersion releaseVersion = GetReleaseVersions();

            if (releaseVersion == null)
            {
                return(sqlScripts);
            }

            foreach (var item in releaseVersion.Versions)
            {
                var version = Easy.Version.Parse(item.Version);
                if (version > versionFrom && version <= versionTo)
                {
                    sqlScripts.AddRange(GetUpdateScripts(item));
                }
            }
            return(sqlScripts);
        }
예제 #3
0
        public bool UpdateDatabaseToVersion(DbContext dbContext, Easy.Version versionTo)
        {
            Easy.Version versionFrom = GetDbVersion(dbContext);
            if (versionFrom < versionTo)
            {
                _logger.LogInformation("Try to update database to version: {0}.", versionTo);

                try
                {
                    IEnumerable <string> sqlScripts = ReadRemoteScripts(versionFrom, versionTo);
                    bool isSuccess = ExecuteScripts(dbContext, sqlScripts);
                    if (isSuccess)
                    {
                        versionFrom.Major    = versionTo.Major;
                        versionFrom.Minor    = versionTo.Minor;
                        versionFrom.Revision = versionTo.Revision;
                        versionFrom.Build    = versionTo.Build;

                        if (versionFrom is DBVersion)
                        {
                            dbContext.Set <DBVersion>().Update(versionFrom as DBVersion);
                        }
                        dbContext.SaveChanges();
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);
                }
            }

            return(true);
        }