Example #1
0
        public ORMInitialize(IConfiguration configuration = null, bool loadAllReferencedAssemblies = false)
        {
            new DatabaseUtilities(configuration);
            new ORMUtilities();

            if (loadAllReferencedAssemblies)
            {
                LoadAllReferencedAssemblies();
            }

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                foreach (var type in assembly.GetTypes().Where(type => type.GetCustomAttributes(typeof(ORMTableAttribute), true).Length > 0))
                {
                    var tableAttribute = type.GetCustomAttribute(typeof(ORMTableAttribute), true) as ORMTableAttribute;

                    var constructor = tableAttribute.EntityType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
                    if (constructor == null)
                    {
                        throw new Exception($"Entity { tableAttribute.EntityType.Name } requires a (private) parameterless constructor.");
                    }

                    if (tableAttribute.CollectionTypeLeft == null &&
                        tableAttribute.CollectionTypeRight == null)
                    {
                        ORMUtilities.CollectionEntityRelations.Add(tableAttribute.CollectionType, tableAttribute.EntityType);
                        ORMUtilities.CollectionEntityRelations.Add(tableAttribute.EntityType, tableAttribute.CollectionType);
                    }
                    else
                    {
                        ORMUtilities.CollectionEntityRelations.Add(tableAttribute.CollectionType, tableAttribute.EntityType);
                        ORMUtilities.CollectionEntityRelations.Add(tableAttribute.EntityType, tableAttribute.CollectionType);
                        ORMUtilities.ManyToManyRelations.Add((tableAttribute.CollectionTypeLeft, tableAttribute.CollectionTypeRight), tableAttribute);
                        ORMUtilities.ManyToManyRelations.Add((tableAttribute.CollectionTypeRight, tableAttribute.CollectionTypeLeft), tableAttribute);
                    }
                    if (!ORMUtilities.CachedColumns.ContainsKey(tableAttribute.CollectionType) &&
                        !ORMUtilities.CachedColumns.ContainsKey(tableAttribute.EntityType))
                    {
                        if (!UnitTestUtilities.IsUnitTesting)
                        {
                            var sqlBuilder = new SQLBuilder();
                            sqlBuilder.BuildQuery(tableAttribute, null, null, null, null, 0);
                            var rows = DatabaseUtilities.ExecuteDirectQuery(sqlBuilder.GeneratedQuery)
                                       .CreateDataReader()
                                       .GetSchemaTable()
                                       .Rows;

                            var uniqueConstraints = DatabaseUtilities.ExecuteDirectQuery(sqlBuilder.ColumnConstraintInformation(tableAttribute.TableName));

                            var columns = new List <string>(rows.Count);

                            for (int i = 0; i < rows.Count; i++)
                            {
                                for (int j = 0; j < uniqueConstraints.Rows.Count; j++)
                                {
                                    if (uniqueConstraints.Rows[j][3].Equals(rows[i][0]))
                                    {
                                        ORMUtilities.UniqueConstraints.Add((tableAttribute.EntityType, (string)rows[i][0]));
                                        break;
                                    }
                                }

                                columns.Add((string)rows[i][0]);
                            }

                            ORMUtilities.CachedColumns.Add(tableAttribute.CollectionType, columns);
                            ORMUtilities.CachedColumns.Add(tableAttribute.EntityType, columns);
                        }
                        else
                        {
                            var columns = ORMUtilities.MemoryEntityDatabase.FetchTableColumns(tableAttribute.TableName);

                            if (columns != null)
                            {
                                ORMUtilities.CachedColumns.Add(tableAttribute.CollectionType, columns);
                                ORMUtilities.CachedColumns.Add(tableAttribute.EntityType, columns);
                            }
                        }
                    }
                }
            }
        }
Example #2
0
 /// <summary>
 /// Returns the amount of records in the database for the current table.
 /// </summary>
 /// <returns>The record count in the database for the current table</returns>
 public static int Records()
 {
     return((int)DatabaseUtilities.ExecuteDirectQuery(new SQLBuilder().Count(new ORMTableAttribute(ORMUtilities.CollectionEntityRelations[typeof(EntityType)], typeof(EntityType)))).Rows[0].ItemArray[0]);
 }