public static void DeleteQuestState(int Id)
        {
            IQuestRepository repo = new EFQuestRepository();
            var questState        = repo.QuestStates.FirstOrDefault(q => q.Id == Id);

            // dangle any from connections connecting TO this state
            var connections = repo.QuestConnections.Where(q => q.QuestStateToId == questState.Id).ToList();

            foreach (var q in connections)
            {
                q.QuestStateToId = -1;
                repo.SaveQuestConnection(q);
            }

            // dangle any from connections connecting TO this state
            connections = repo.QuestConnections.Where(q => q.QuestStateFromId == questState.Id).ToList();
            foreach (var q in connections)
            {
                q.QuestStateFromId = -1;
                repo.SaveQuestConnection(q);
            }

            // delete any ends on this quest state
            var ends = repo.QuestEnds.Where(q => q.QuestStateId.Id == questState.Id).ToList();

            foreach (var q in ends)
            {
                repo.DeleteQuestEnd(q.Id);
            }

            // delete any quest state preactions on this quest state
            var preactions = repo.QuestStatePreactions.Where(q => q.QuestStateId.Id == questState.Id).ToList();

            foreach (var q in preactions)
            {
                repo.DeleteQuestStatePreaction(q.Id);
            }

            // finally actually delete this state
            repo.DeleteQuestState(Id);
        }
        public static void DeleteQuestStatePreaction(int id)
        {
            IQuestRepository repo = new EFQuestRepository();

            repo.DeleteQuestStatePreaction(id);
        }