public IEnumerable <IRelationConfig> GetRelations(IDatabase database, ITableConfig table, ITransactionSource transaction = null)
        {
            var properties = new EntityPropertyEnumerator(table.TableType);

            foreach (var property in properties)
            {
                if (!RelationValidator.Validate(database, property))
                {
                    continue;
                }
                var relation = Factories.Relation.Create(table, RelationConfig.By(property));
                if (!RelationValidator.Validate(database, true, relation, transaction))
                {
                    continue;
                }
                yield return(relation);
            }
        }
        public IEnumerable <IRelationConfig> GetRelations <T1, T2>(IDatabase database, ITableConfig <T1, T2> table, ITransactionSource transaction = null)
        {
            var properties = new EntityPropertyEnumerator(table.LeftTable.TableType);

            foreach (var property in properties)
            {
                var elementType = default(Type);
                if (!RelationValidator.Validate(database, property, out elementType) || !typeof(T2).IsAssignableFrom(elementType))
                {
                    continue;
                }
                var relation = Factories.Relation.Create(table.LeftTable, RelationConfig.By(property, Defaults.Relation.Flags | RelationFlags.ManyToMany));
                if (!RelationValidator.Validate(database, true, relation, transaction))
                {
                    continue;
                }
                yield return(relation);
            }
        }