我已經為此苦苦掙扎了半天。連接到我的資料庫時,我無法讓背景關系在我的應用程式中作業。如果我想添加/洗掉 dbset,我可以很好地連接到資料庫,但我無法弄清楚位于 SelectCharacter 檔案中的 dbcontext 有什么問題。
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);
}
}
}
}
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();
}
}
}
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();
}
}
}
我嘗試以多種不同的方式重新格式化“Using var context”陳述句,我在檔案中看到了這一點。包括將其更改為僅打開和關閉連接。我也嘗試過移動所有連接邏輯的位置。我不確定問題是我試圖從 SelectCharacter 檔案訪問資料庫,還是 Program.cs 檔案中存在問題。
uj5u.com熱心網友回復:
您需要決定什么是靜態方法,什么是實體方法。你有
public SelectCharacter()
{
_cnstr = Program._configuration["ConnectionStrings:HeroesDB"];
_optionsBuilder = new DbContextOptionsBuilder<HeroesDBContext>().UseSqlServer(_cnstr);
}
private static void RegisterUser()
{
using var context = new HeroesDBContext(_optionsBuilder.Options);
由于 RegisterUser() 是一個靜態方法,因此沒有 SelectCharacter 實體,并且分配 _optionsBuilder 的 SelectCharacter() 建構式沒有運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/528466.html
上一篇:如何用不同的值更新同一列
