Non, il t'a dit que lorsque tu clic sur le bouton jouer, le client va établir une connexion vers l'adresse et le port spécifié dans le fichier config.xml à la racine de l'éxecutable du jeu, rien a voir avec une base donnée. Pour ta dernière question, je dirai entity framework pour ma part, mais ça dépend de toi il faut faire au mieux et le plus possible avec les choses que l'on comprends.
En parlant de chose que l'on comprends, ne t'aventure pas dans le multi-thread si tu ne comprends pas ça, je me permet de te dire ça au vu de la façon dont tu as utiliser IAsyncResult. Au passage : la TPL est sortit en 2009, plus personne utilise IAsyncResult depuis bien longtemps...
Si tu souhaites te renseigner sur la bonne façon d'implémenter une logique network en C# je te conseil ce repo https://github.com/mgravell/simplsockets, plus particulièrement le folder SimplPipelines pour la façon la plus récente de le faire avec les nouvelles fonctionnalités introduite à partir de .NET core 2.0 (pour plus d'information : https://blog.marcgravell.com/2018/07/pipe-dreams-part-1.html) ainsi que le folder SimplSocket te propose la façon verbeuse de faire qu'on peut retrouver dans la plupart des projets en général.
Et sinon je t'assure qu'il y a des choses bien plus importantes à implémenter avant de s'attaquer à la partie network : binary, serialization entre autre, et une logique comme l'entity component system (afin d'avoir des behaviors facilement testable, maintenable et extensible) serait un gros plus dans une application orienté jeu video comme ça.
Enfin, pour une application côté serveur de façon plus général il y a des langages fait spécialement pour tel que Rust. Cf. https://doc.rust-lang.org/book/foreword.html, ECS de rust : https://slide-rs.github.io/specs/
Mais se lancer dans un projet de cet envergure pour apprendre la programmation c'est du suicide, il faut un certain bagage pour pouvoir se débrouiller.