/// <summary>
        /// Get rule value for an attribute that belongs to the given entity
        /// </summary>
        /// <param name="NameOrAlias"></param>
        /// <param name="AttributeName"></param>
        /// <returns></returns>
        public string GetRuleValue(string NameOrAlias, string AttributeName, bool IsMain = false)
        {
            VirtualRule Rule = Rules.First(R => R.SourceERElement.Name == NameOrAlias || R.Alias == NameOrAlias);

            if (Rule != null)
            {
                return(Rule.Rules.First(R => R.Key == AttributeName).Value);
            }
            else
            {
                throw new RuleNotFoundException($"No map rule found for ER Element [{NameOrAlias}]");
            }
        }
        /// <summary>
        /// Generates a VirtualMap instance from a ModelMapping instance
        /// </summary>
        /// <param name="ModelMap"></param>
        /// <returns></returns>
        public static VirtualMap FromModelMap(ModelMapping ModelMap)
        {
            // Create list of virtual rules
            List <VirtualRule> VirtualRules = new List <VirtualRule>();

            // Iterate ModelMap rules
            foreach (MapRule Rule in ModelMap.Rules)
            {
                VirtualRule ConvertedRule = new VirtualRule(Rule.Source);
                ConvertedRule.Rules = Rule.Rules;

                VirtualRules.Add(ConvertedRule);
            }

            return(new VirtualMap(VirtualRules));
        }