示例#1
0
        private static SQLiteDatabase GetTestDatabase(bool setupTestData = true, string namePrefix = null)
        {
            namePrefix = namePrefix ?? 8.RandomLetters();
            SQLiteDatabase testDatabase = new SQLiteDatabase(namePrefix + "_SQLite", Dao.ConnectionName(typeof(MainObject)));

            if (testDatabase.DatabaseFile.Exists)
            {
                try
                {
                    testDatabase.DatabaseFile.Delete();
                }
                catch (Exception ex)
                {
                    OutLineFormat("Unable to delete existing db file: {0}", ConsoleColor.Yellow, ex.Message);
                }
            }

            Exception          e;
            EnsureSchemaStatus result = testDatabase.TryEnsureSchema(typeof(MainObject), out e, Logger);

            if (result == EnsureSchemaStatus.Error)
            {
                throw e;
            }

            if (setupTestData)
            {
                SetupTestData(testDatabase);
            }

            return(testDatabase);
        }
示例#2
0
        public virtual EnsureSchemaStatus TryEnsureSchema(Type type, bool force, out Exception ex, ILogger logger = null)
        {
            EnsureSchemaStatus result = EnsureSchemaStatus.Invalid;

            ex = null;
            try
            {
                string schemaName = Dao.RealConnectionName(type);
                if (!SchemaNames.Contains(schemaName) || force)
                {
                    _schemaNames.Add(schemaName);
                    SchemaWriter schema = ServiceProvider.Get <SchemaWriter>();
                    schema.WriteSchemaScript(type);
                    ExecuteSql(schema, ServiceProvider.Get <IParameterBuilder>());
                    result = EnsureSchemaStatus.Success;
                }
                else
                {
                    result = EnsureSchemaStatus.AlreadyDone;
                }
            }
            catch (Exception e)
            {
                ex     = e;
                result = EnsureSchemaStatus.Error;
                logger = logger ?? Log.Default;
                logger.AddEntry("Non fatal error occurred trying to write schema for type {0}: {1}", LogEventType.Warning, ex, type.Name, ex.Message);
            }
            return(result);
        }
示例#3
0
        /// <summary>
        /// Generates a Dao Assembly for the underlying
        /// storable types if it has not yet been generated
        /// </summary>
        /// <returns></returns>
        public Assembly EnsureDaoAssemblyAndSchema(bool useExisting = true)
        {
            if (_daoAssembly == null)
            {
                _daoAssembly = GenerateDaoAssembly(useExisting);
            }

            Args.ThrowIfNull(Database, "Database");
            if (SchemaStatus == EnsureSchemaStatus.Invalid)
            {
                MultiTargetLogger logger = new MultiTargetLogger();
                Subscribers.Each(l => logger.AddLogger(l));
                SchemaStatus = Database.TryEnsureSchema(_daoAssembly.GetTypes().First(type => type.HasCustomAttributeOfType(out TableAttribute attr) && attr.ConnectionName.Equals(SchemaName)), logger);
            }

            return(_daoAssembly);
        }
示例#4
0
文件: Db.cs 项目: dekkerb115/Bam.Net
        /// <summary>
        /// Creates the tables for the specified type
        /// </summary>
        /// <param name="type"></param>
        public static EnsureSchemaStatus EnsureSchema(Type type, Database database = null)
        {
            string             name   = Dao.ConnectionName(type);
            Database           db     = database ?? Db.For(type);
            EnsureSchemaResult result = new EnsureSchemaResult {
                Database = db, SchemaName = name
            };
            EnsureSchemaStatus status = _ensureSchemaResults.Where(esr => esr.Equals(result)).Select(esr => esr.Status).FirstOrDefault();

            if (status != EnsureSchemaStatus.AlreadyDone ||
                status != EnsureSchemaStatus.Success)
            {
                _ensureSchemaResults.Add(result);
                status = db.TryEnsureSchema(type);
            }
            else
            {
                status = EnsureSchemaStatus.AlreadyDone;
            }
            result.Status = status;
            return(status);
        }