运行程序时DB Context为空问题排查求助
数据库连接问题:DbContext在SelectCharacter中无法正常工作
我折腾了半天,连接数据库时DbContext没法正常工作。添加/移除DbSet的时候能正常连接数据库,但搞不清楚SelectCharacter文件里的DbContext到底哪里出问题。我试过按照文档修改using var context的多种写法,包括手动打开和关闭连接,也调整过连接逻辑的位置,现在不确定问题出在SelectCharacter访问数据库的代码里,还是Program.cs本身有问题。
HeroesDBContext代码
using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; namespace HeroesDB { public class HeroesDBContext : DbContext { public static DbSet<HeroModels.Mage> Mages { get; set; } public static DbSet<HeroModels.Archer> Archers { get; set; } public static DbSet<HeroModels.Weapon> Weapons { get; set; } public static DbSet<HeroModels.Food> Foods { get; set; } public DbSet<UserRegistration.UserController> Users { get; set; } public HeroesDBContext() { } public HeroesDBContext(DbContextOptions options) : base(options) { } //add to allow migrations when the context is not built protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); var config = builder.Build(); var cnstr = config["ConnectionStrings:HeroesDB"]; var options = new DbContextOptionsBuilder<HeroesDBContext>().UseSqlServer(cnstr); optionsBuilder.UseSqlServer(cnstr); } } } }
Program.cs代码
using Microsoft.Extensions.Configuration; namespace Heroes { public static class Program { public static IConfigurationRoot _configuration; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); _configuration = builder.Build(); SelectCharacter.CharacterSelection(); Adventure.AdventureStart(); } } }
SelectCharacter代码
using HeroesDB; using HeroModels; using Microsoft.EntityFrameworkCore; using SolutionItems; namespace Heroes { public partial class SelectCharacter { private static readonly HeroCreation heroCreation = new(); private static readonly Mage mage = heroCreation.mage; private static readonly Archer archer = heroCreation.archer; public static IHero CurrentCharacter; private string _cnstr; private static DbContextOptionsBuilder _optionsBuilder; public SelectCharacter() { _cnstr = Program._configuration["ConnectionStrings:HeroesDB"]; _optionsBuilder = new DbContextOptionsBuilder<HeroesDBContext>().UseSqlServer(_cnstr); } private static void RegisterUser() { using var context = new HeroesDBContext(_optionsBuilder.Options); var user = new UserRegistration.UserController(); Console.WriteLine("Please enter a username:"); var username = Console.ReadLine(); //Check if username is already taken var userExists = context.Users.Any(u => u.Username == username); if (userExists) { Console.WriteLine("Username already exists. Please try again."); RegisterUser(); } else { user.Username = username; } Console.WriteLine("Please enter a password:"); var password = Console.ReadLine(); //ensure password is at least 8 characters if (password.Length < 4) { Console.WriteLine("Password must be at least 4 characters. Please try again."); RegisterUser(); } else { user.Password = password; } user.Password = password; user.Username = username; context.Users.Add(user); context.SaveChanges(); } } }
内容的提问来源于stack exchange,提问作者The_Rico
相关产品推荐
相关产品推荐

