コード例 #1
0
        public List <SqlStringBuilder> GetInsertStatements(object instance, Database db)
        {
            List <SqlStringBuilder> results = new List <SqlStringBuilder>();

            db = db ?? Database;
            SqlStringBuilder          rootInsert  = db.GetService <SqlStringBuilder>();
            Type                      type        = instance.GetType();
            TypeInheritanceDescriptor inheritance = new TypeInheritanceDescriptor(type);
            Type                      rootType    = inheritance.RootType;

            rootInsert.Insert(Dao.TableName(rootType), GetBaseTypeAssignValues(rootType, instance, rootInsert.ColumnNameFormatter).ToArray());
            rootInsert.Id();
            rootInsert.Go();
            results.Add(rootInsert);
            inheritance.Chain.BackwardsEach(typeTable =>
            {
                Type tableType = typeTable.Type;
                if (tableType != rootType)
                {
                    SqlStringBuilder inheritor = db.GetService <SqlStringBuilder>();
                    inheritor.Insert(Dao.TableName(tableType), GetInheritingTypeAssignValues(tableType, instance, inheritor.ColumnNameFormatter).ToArray());
                    inheritor.Go();
                    results.Add(inheritor);
                }
            });
            return(results);
        }
コード例 #2
0
        public List <SqlStringBuilder> GetUpdateStatements(object instance, Type type, Database db)
        {
            List <SqlStringBuilder> results = new List <SqlStringBuilder>();

            db = db ?? Database;
            SqlStringBuilder          rootUpdate          = db.GetService <SqlStringBuilder>();
            Func <string, string>     columnNameFormatter = rootUpdate.ColumnNameFormatter;
            AssignValue               uniqueness          = GetUniquenessFilter(instance, columnNameFormatter);
            TypeInheritanceDescriptor inheritance         = new TypeInheritanceDescriptor(type);
            Type rootType = inheritance.RootType;

            rootUpdate.Update(Dao.TableName(rootType), GetBaseTypeAssignValues(rootType, instance, columnNameFormatter).ToArray()).Where(uniqueness);
            results.Add(rootUpdate);
            inheritance.Chain.BackwardsEach(typeTable =>
            {
                Type tableType = typeTable.Type;
                if (tableType != rootType)
                {
                    SqlStringBuilder inheritor = db.GetService <SqlStringBuilder>();
                    inheritor.Update(Dao.TableName(tableType), GetInheritingTypeAssignValues(tableType, instance, columnNameFormatter).ToArray()).Where(uniqueness);
                    inheritor.Go();
                    results.Add(inheritor);
                }
            });
            return(results);
        }
コード例 #3
0
 protected override void AddSchemaTables(TypeSchema typeSchema, SchemaManager schemaManager, ITypeTableNameProvider tableNameProvider = null)
 {
     tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider();
     foreach (Type topType in typeSchema.Tables)
     {
         TypeInheritanceDescriptor inheritance = new TypeInheritanceDescriptor(topType);
         Type inheritFrom = null;
         inheritance.Chain.BackwardsEach(typeTable =>
         {
             string tableName = typeTable.GetTableName(tableNameProvider);
             schemaManager.AddTable(tableName);
             schemaManager.ExecutePreColumnAugmentations(tableName);
             typeTable.PropertyColumns.Each(pc =>
             {
                 AddPropertyColumn(schemaManager, typeSchema.DefaultDataTypeBehavior, tableName, pc.PropertyInfo);
             });
             schemaManager.ExecutePostColumnAugmentations(tableName);
             schemaManager.AddColumn(tableName, "Id", DataTypes.Long);
             if (inheritFrom != null)
             {
                 schemaManager.SetForeignKey(tableNameProvider.GetTableName(inheritFrom), tableName, "Id", "Id");
             }
             else
             {
                 schemaManager.SetKeyColumn(tableName, "Id");
             }
             inheritFrom = typeTable.Type;
         });
     }
 }
コード例 #4
0
 private void AddAdditionalReferenceAssemblies(TypeInheritanceDescriptor typeInheritanceDescriptor)
 {
     if (!_additionalReferenceTypes.Contains(typeInheritanceDescriptor.Type))
     {
         AddAdditionalReferenceAssemblies(typeInheritanceDescriptor.Type);
         foreach (TypeTable type in typeInheritanceDescriptor.Chain)
         {
             AddAdditionalReferenceAssemblies(type.Type);
         }
     }
 }