Приоритизация классов для вставок базы данных - PullRequest
0 голосов
/ 07 июля 2019

Мне нужно создать сервис для вставки данных в базу данных в определенном порядке, поскольку таблица имеет ограничения внешнего ключа.Удаление ограничений и повторное добавление не является предпочтительным, поэтому я пытаюсь вставить сначала дочерние данные, а затем родительские.

Подведем итог этому на примере

  • Титан <- Энергия </li>
  • Игрок <- Титан </li>

Энергия должна бытьсначала вставляется затем титан, потом игрок.

Я попытался создать сетку для представления, есть ли у класса другая ссылка на класс.

class Program
    {
        static void Main(string[] args)
        {

            Type [] tables_toScan = new Type[] { typeof(Titan), typeof(Player), typeof(Energy) };

            int table_scan_length = tables_toScan.Count();

            int[,] grid_table = new int[table_scan_length, table_scan_length];

            IDictionary<Type, int> position_space = new Dictionary<Type, int>();
            for (int i = table_scan_length-1; i > -1; i--)
            {
                position_space.Add(tables_toScan[i], i);
            }

            foreach (var type in tables_toScan)
            {
                PropertyInfo[] propertyInfos = type.GetProperties();
                IEnumerable<Type> typeList = propertyInfos.Select(x => x.PropertyType).Distinct();

                foreach (var currentPropertyType in typeList)
                {
                    if (tables_toScan.Contains(currentPropertyType))
                    {
                        grid_table[position_space[currentPropertyType], position_space[type]] = 1;
                    }
                    else if (currentPropertyType.IsGenericType &&
                      currentPropertyType != typeof(string) && typeof(IEnumerable).IsAssignableFrom(currentPropertyType))
                    {
                        var collectionUnderLyingType = currentPropertyType.GetGenericArguments()[0];
                        if (tables_toScan.Contains(collectionUnderLyingType))
                        {
                            grid_table[position_space[collectionUnderLyingType], position_space[type]] = 1;
                        }
                    }
                }
            }
            Console.ReadKey();
        }
    }

    class Titan
    {
        public int id { get; set; }
        public IList<Energy> energy { get; set; }
    }

    class Player
    {
        public int id { get; set; }
        public Titan titan { get; set; }
    }

    class Energy
    {
        public int id { get; set; }
        public string color { get; set; }
    }

Я хотел бы иметь классы для заданного сценария:

  • Энергия -> 1,
  • Титан -> 2 и Игрок --> 3

сетка печати дает

           Titan      Player     Energy
Titan      0          1          0
Player     0          0          0
Energy     1          0          0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...