DbContextInitializer.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. using Domain;
  2. using Domain.Weapons;
  3. using Domain.XML_Model;
  4. using Infrastructure;
  5. using System.Collections.Generic;
  6. namespace DataLayer;
  7. public static class DbContextInitializer
  8. {
  9. public static void Initialize(DeathwatchDbContext context, string filepath = null)
  10. {
  11. context.Database.EnsureCreated();
  12. // Look for any students.
  13. if (context.Players.Any()) return; // DB has been seeded
  14. var weapon = new Weapon
  15. {
  16. At = "test",
  17. Range = 30,
  18. Attribute = "CT",
  19. Type = "RANGE"
  20. };
  21. var players = new[]
  22. {
  23. new Player
  24. {
  25. Experience = 17400,
  26. CC = 52,
  27. CT = 40,
  28. F = 46,
  29. E = 45,
  30. AG = 50,
  31. INT = 34,
  32. PER = 43,
  33. FM = 43,
  34. SOC = 40,
  35. Weapons = new List<Weapon> { weapon }
  36. }
  37. };
  38. foreach (var player in players) context.Players.Add(player);
  39. context.SaveChanges();
  40. SeedDatabase(context, filepath);
  41. }
  42. public static void SeedDatabase(DeathwatchDbContext context, string filesPath = null)
  43. {
  44. // Define the paths to the XML files
  45. //string accessoireFilePath = Path.Combine("XML", "Accessoires.xml");
  46. //string ameliorationFilePath = Path.Combine("XML", "Ameliorations.xml");
  47. //string extensionFilePath = Path.Combine("XML", "Extensions.xml");
  48. if (!string.IsNullOrEmpty(filesPath))
  49. {
  50. var roots = new List<Root>();
  51. try
  52. {
  53. // Deserialize the XML files
  54. GetRootsElements(roots, filesPath);
  55. ExtractFromRoot(context, roots);
  56. }
  57. catch (Exception e)
  58. {
  59. throw;
  60. }
  61. }
  62. }
  63. private static void GetRootsElements(List<Root> roots, string filesPath)
  64. {
  65. var fileExist = Directory.Exists(filesPath);
  66. if (!fileExist) return;
  67. var xmlFiles = Directory.GetFiles(filesPath, "*.xml");
  68. roots.AddRange(xmlFiles.Select(XmlHelper.DeserializeXmlFile<Root>));
  69. }
  70. private static void ExtractFromRoot(DeathwatchDbContext context, List<Root> roots)
  71. {
  72. foreach (var root in roots.OfType<Root>())
  73. {
  74. if (!context.Accessoires.Any())
  75. context.Accessoires.AddRange(root.AccessoiresArmes);
  76. else
  77. {
  78. foreach (var item in root.AccessoiresArmes.Where(item => !context.Accessoires.Any(e => e.Id == item.Id)))
  79. {
  80. context.Accessoires.Add(item);
  81. }
  82. }
  83. context.SaveChanges();
  84. if (!context.Améliorations.Any())
  85. context.Améliorations.AddRange(root.Améliorations);
  86. else
  87. {
  88. foreach (var item in root.Améliorations.Where(item => !context.Améliorations.Any(e => e.Id == item.Id)))
  89. {
  90. context.Améliorations.Add(item);
  91. }
  92. }
  93. context.SaveChanges();
  94. if (!context.Archétypes.Any())
  95. context.Archétypes.AddRange(root.Archétypes);
  96. else
  97. {
  98. foreach (var item in root.Archétypes.Where(item => !context.Archétypes.Any(e => e.Id == item.Id)))
  99. {
  100. context.Archétypes.Add(item);
  101. }
  102. }
  103. context.SaveChanges();
  104. if (!context.Armes.Any())
  105. context.Armes.AddRange(root.Armes);
  106. else
  107. {
  108. foreach (var item in root.Armes.Where(item => !context.Armes.Any(e => e.Id == item.Id)))
  109. {
  110. context.Armes.Add(item);
  111. }
  112. }
  113. context.SaveChanges();
  114. if (!context.Armures.Any())
  115. context.Armures.AddRange(root.Armures);
  116. else
  117. {
  118. foreach (var item in root.Armures.Where(item => !context.Armures.Any(e => e.Id == item.Id)))
  119. {
  120. context.Armures.Add(item);
  121. }
  122. }
  123. context.SaveChanges();
  124. if (!context.Assermentations.Any())
  125. context.Assermentations.AddRange(root.Assermentations);
  126. else
  127. {
  128. foreach (var item in root.Assermentations.Where(item => !context.Assermentations.Any(e => e.Id == item.Id)))
  129. {
  130. context.Assermentations.Add(item);
  131. }
  132. }
  133. context.SaveChanges();
  134. if (!context.Attributs.Any())
  135. context.Attributs.AddRange(root.AttributsArmes);
  136. else
  137. {
  138. foreach (var item in root.AttributsArmes.Where(item => !context.Attributs.Any(e => e.Id == item.Id)))
  139. {
  140. context.Attributs.Add(item);
  141. }
  142. }
  143. context.SaveChanges();
  144. if (!context.Carrières.Any())
  145. context.Carrières.AddRange(root.Carrières);
  146. else
  147. {
  148. foreach (var item in root.Carrières.Where(item => !context.Carrières.Any(e => e.Id == item.Id)))
  149. {
  150. context.Carrières.Add(item);
  151. }
  152. }
  153. context.SaveChanges();
  154. if (!context.Competences.Any())
  155. context.Competences.AddRange(root.Competences);
  156. else
  157. {
  158. foreach (var item in root.Competences.Where(item => !context.Competences.Any(e => e.Id == item.Id)))
  159. {
  160. context.Competences.Add(item);
  161. }
  162. }
  163. context.SaveChanges();
  164. if (!context.Coordonnées.Any())
  165. context.Coordonnées.AddRange(root.Coordonnées);
  166. else
  167. {
  168. foreach (var item in root.Coordonnées.Where(item => !context.Coordonnées.Any(e => e.Id == item.Id)))
  169. {
  170. context.Coordonnées.Add(item);
  171. }
  172. }
  173. context.SaveChanges();
  174. if (!context.Cybernétiques.Any())
  175. context.Cybernétiques.AddRange(root.Cybernétiques);
  176. else
  177. {
  178. foreach (var item in root.Cybernétiques.Where(item => !context.Cybernétiques.Any(e => e.Id == item.Id)))
  179. {
  180. context.Cybernétiques.Add(item);
  181. }
  182. }
  183. context.SaveChanges();
  184. if (!context.Disciplines.Any())
  185. context.Disciplines.AddRange(root.Disciplines);
  186. else
  187. {
  188. foreach (var item in root.Disciplines.Where(item => !context.Disciplines.Any(e => e.Id == item.Id)))
  189. {
  190. context.Disciplines.Add(item);
  191. }
  192. }
  193. context.SaveChanges();
  194. if (!context.Divinations.Any())
  195. context.Divinations.AddRange(root.Divinations);
  196. else
  197. {
  198. foreach (var item in root.Divinations.Where(item => !context.Divinations.Any(e => e.Id == item.Id)))
  199. {
  200. context.Divinations.Add(item);
  201. }
  202. }
  203. context.SaveChanges();
  204. if (!context.Equipements.Any())
  205. context.Equipements.AddRange(root.Equipements);
  206. else
  207. {
  208. foreach (var item in root.Equipements.Where(item => !context.Equipements.Any(e => e.Id == item.Id)))
  209. {
  210. context.Equipements.Add(item);
  211. }
  212. }
  213. context.SaveChanges();
  214. if (!context.Implants.Any())
  215. context.Implants.AddRange(root.Implants);
  216. else
  217. {
  218. foreach (var item in root.Implants.Where(item => !context.Implants.Any(e => e.Id == item.Id)))
  219. {
  220. context.Implants.Add(item);
  221. }
  222. }
  223. context.SaveChanges();
  224. if (!context.Mondes.Any())
  225. context.Mondes.AddRange(root.Mondes);
  226. else
  227. {
  228. foreach (var item in root.Mondes.Where(item => !context.Mondes.Any(e => e.Id == item.Id)))
  229. {
  230. context.Mondes.Add(item);
  231. }
  232. }
  233. context.SaveChanges();
  234. if (!context.Mutations.Any())
  235. context.Mutations.AddRange(root.Mutations);
  236. else
  237. {
  238. foreach (var item in root.Mutations.Where(item => !context.Mutations.Any(e => e.Id == item.Id)))
  239. {
  240. context.Mutations.Add(item);
  241. }
  242. }
  243. context.SaveChanges();
  244. if (!context.Pouvoirs.Any())
  245. context.Pouvoirs.AddRange(root.Pouvoirs);
  246. else
  247. {
  248. foreach (var item in root.Pouvoirs.Where(item => !context.Pouvoirs.Any(e => e.Id == item.Id)))
  249. {
  250. context.Pouvoirs.Add(item);
  251. }
  252. }
  253. context.SaveChanges();
  254. if (!context.Promotions.Any())
  255. context.Promotions.AddRange(root.Promotions);
  256. else
  257. {
  258. foreach (var item in root.Promotions.Where(item => !context.Promotions.Any(e => e.Id == item.Id)))
  259. {
  260. context.Promotions.Add(item);
  261. }
  262. }
  263. context.SaveChanges();
  264. if (!context.Seuils.Any())
  265. context.Seuils.AddRange(root.SeuilsXp);
  266. else
  267. {
  268. foreach (var item in root.SeuilsXp.Where(item => !context.Seuils.Any(e => e.Id == item.Id)))
  269. {
  270. context.Seuils.Add(item);
  271. }
  272. }
  273. context.SaveChanges();
  274. if (!context.Sousmondes.Any())
  275. context.Sousmondes.AddRange(root.Sousmondes);
  276. else
  277. {
  278. foreach (var item in root.Sousmondes.Where(item => !context.Sousmondes.Any(e => e.Id == item.Id)))
  279. {
  280. context.Sousmondes.Add(item);
  281. }
  282. }
  283. context.SaveChanges();
  284. if (!context.Talents.Any())
  285. context.Talents.AddRange(root.Talents);
  286. else
  287. {
  288. foreach (var item in root.Talents.Where(item => !context.Talents.Any(e => e.Id == item.Id)))
  289. {
  290. context.Talents.Add(item);
  291. }
  292. }
  293. context.SaveChanges();
  294. if (!context.Traits.Any())
  295. context.Traits.AddRange(root.Traits);
  296. else
  297. {
  298. foreach (var item in root.Traits.Where(item => !context.Traits.Any(e => e.Id == item.Id)))
  299. {
  300. context.Traits.Add(item);
  301. }
  302. }
  303. context.SaveChanges();
  304. if (!context.Troubles.Any())
  305. context.Troubles.AddRange(root.Troubles);
  306. else
  307. {
  308. foreach (var item in root.Troubles.Where(item => !context.Troubles.Any(e => e.Id == item.Id)))
  309. {
  310. context.Troubles.Add(item);
  311. }
  312. }
  313. context.SaveChanges();
  314. if (!context.TypeMondes.Any())
  315. context.TypeMondes.AddRange(root.TypeMondes);
  316. else
  317. {
  318. foreach (var item in root.TypeMondes.Where(item => !context.TypeMondes.Any(e => e.Id == item.Id)))
  319. {
  320. context.TypeMondes.Add(item);
  321. }
  322. }
  323. context.SaveChanges();
  324. if (!context.TypesNom.Any())
  325. context.TypesNom.AddRange(root.TypesNom);
  326. else
  327. {
  328. foreach (var item in root.TypesNom.Where(item => !context.TypesNom.Any(e => e.Id == item.Id)))
  329. {
  330. context.TypesNom.Add(item);
  331. }
  332. }
  333. context.SaveChanges();
  334. }
  335. }
  336. }