Мне нужно создать сервис для вставки данных в базу данных в определенном порядке, поскольку таблица имеет ограничения внешнего ключа.Удаление ограничений и повторное добавление не является предпочтительным, поэтому я пытаюсь вставить сначала дочерние данные, а затем родительские.
Подведем итог этому на примере
- Титан <- Энергия </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