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); } } } } } }
/// <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]); }