// We cannot use regular access thru EntitySession - db info/version loads at the very start of connecting to db; // the entity app is not ready yet (schema not updated, etc). public DbVersionInfo LoadDbInfo(DbSettings settings, string appName, Vita.Data.Driver.DbModelLoader loader) { var thisSchema = settings.ModelConfig.GetSchema(this.Area); if (!loader.TableExists(thisSchema, "DbInfo")) return null; var dbInfoTableName = settings.Driver.GetFullName(thisSchema, "DbInfo"); var dbModuleInfoTableName = settings.Driver.GetFullName(thisSchema, "DbModuleInfo"); try { var dbInfo = new DbVersionInfo(); var sql = string.Format("SELECT * FROM {0};", dbInfoTableName); var dt = loader.ExecuteSelect(sql); var appRow = dt.Rows.FindRow("AppName", appName); if (appRow != null) { dbInfo.InstanceType = (DbInstanceType)appRow.GetAsInt("InstanceType"); var strVersion = appRow.GetAsString("Version"); Version dbVersion; if (Version.TryParse(strVersion, out dbVersion)) dbInfo.Version = dbVersion; // 'Values' column appears in v 1.1 if (dt.Columns.Contains("Values")) { var strValues = appRow.GetAsString("Values"); DeserializeValues(dbInfo, strValues); } } //if appRow //Read modules sql = string.Format("SELECT * FROM {0};", dbModuleInfoTableName); dt = loader.ExecuteSelect(sql); foreach(DataRow row in dt.Rows) { var moduleName = row.GetAsString("ModuleName"); var schema = row.GetAsString("Schema"); var strModuleVersion = row.GetAsString("Version"); Version v; if (!Version.TryParse(strModuleVersion, out v)) v = null; dbInfo.Modules.Add(new ModuleDbVersionInfo(schema, moduleName, v)); } return dbInfo; } catch (Exception ex) { Trace.WriteLine("Failed to load DbInfo record: " + ex.ToLogString()); //Debugger.Break(); return null; } }