public Ability GetAbility(int ability_id) { Ability ability = null; using (IDbConnection connection = database.CreateOpenConnection()) { ability = VM_Ability.RetrieveSpecificAbility(connection, ability_id); if (ability == null) { return ability; } ability.Generation = VM_Generation.RetrieveSpecificGeneration(connection, ability.Generation.Id); if (ability.Generation != null && ability.Generation.MainRegion != null) { ability.Generation.MainRegion = VM_Region.RetrieveSpecificRegion(connection, ability.Generation.MainRegion.Id); } ability.AbilityChangelog = VM_Ability.RetrieveSpecificAbilityChangelog(connection, ability.Id); foreach (AbilityChangelog ac in ability.AbilityChangelog) { if (ac != null && ac.ChangedInVersionGroup != null) { ac.ChangedInVersionGroup = VM_VersionGroups.RetrieveSpecificVersionGroups(connection, ac.ChangedInVersionGroup.Id); ac.AbilityChangelogProse = VM_Ability.RetrieveSpecificAbilityChangelogProse(connection, ac.Id); foreach (AbilityChangelogProse acp in ac.AbilityChangelogProse) { acp.LocalLanguage = VM_Language.RetrieveSpecificLanguage(connection, acp.LocalLanguage.Id); } if (ac.ChangedInVersionGroup.Generation != null) { ac.ChangedInVersionGroup.Generation = VM_Generation.RetrieveSpecificGeneration(connection, ac.ChangedInVersionGroup.Generation.Id); if (ac.ChangedInVersionGroup.Generation.MainRegion != null) { ac.ChangedInVersionGroup.Generation.MainRegion = VM_Region.RetrieveSpecificRegion(connection, ac.ChangedInVersionGroup.Generation.MainRegion.Id); } } } } ability.AbilityName = VM_Ability.RetrieveSpecificAbilityName(connection, ability_id); foreach (AbilityName an in ability.AbilityName) { if (an != null && an.LocalLanguage != null) { an.LocalLanguage = VM_Language.RetrieveSpecificLanguage(connection, an.LocalLanguage.Id); } } ability.AbilityProse = VM_Ability.RetrieveSpecificAbilityProse(connection, ability_id); foreach (AbilityProse ap in ability.AbilityProse) { if (ap != null && ap.LocalLanguage != null) { ap.LocalLanguage = VM_Language.RetrieveSpecificLanguage(connection, ap.LocalLanguage.Id); } } connection.Close(); } // Connection return ability; }