Sto avendo un problema che quando provo ad accedere ad un campo nel mio PartsDbContext ottengo il seguente errore:
System.Data.SqlClient.SqlException: 'Nome oggetto non valido' nomeCampo ''
Sembra che questo sia dovuto al fatto che sto cercando di rendere PartsDbContext utilizza lo stesso database del mio ApplicationDbContext che viene utilizzato con Identity. Ho bisogno di sapere come configurare un secondo dbcontext per lavorare con EF core che utilizza / crea un database differente.
Ho provato a creare una seconda stringa di connessione, ma questo mi riporta questo errore:
System.Data.SqlClient.SqlException: 'Impossibile aprire il database "PartsDb" richiesto dal login. L'accesso non è riuscito. Accesso non riuscito per l'utente 'DESKTOP-4VPU567 \ higle'. '
Ecco il mio codice:
appsettings.json
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-PrecisionCustomPC-b14db89e-86ad-4855-a17f-ac64a04339aa;Trusted_Connection=True;MultipleActiveResultSets=true",
"PartsConnection": "Server=(localdb)\\mssqllocaldb;Database=PartsDb"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
PartsDbContext.cs
public class PartsDbContext : DbContext
{
public DbSet<PartsViewModels.Tower> Towers { get; set; }
public DbSet<PartsViewModels.Motherboard> Motherboards { get; set; }
public PartsDbContext(DbContextOptions<PartsDbContext> options)
: base(options)
{
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddEntityFramework()
.AddDbContext<PartsDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("PartsConnection")));
services.AddMvc();
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("Admin"));
});
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
AdminController.cs
[Authorize(Policy = "RequireAdminRole")]
public class AdminController : Controller
{
private readonly PartsDbContext _context;
public AdminController(PartsDbContext context)
{
_context = context;
}
public IActionResult Index()
{
return View();
}
public IActionResult Towers()
{
var model = _context.Towers.ToList();
return View(model);
}
}
La linea var model = _context.Towers.ToList();
è dove si presenta l'errore.
Di nuovo. Voglio configurare il mio PartsDbContext per lavorare con Entity Framework Core in modo che EF-Core crei automaticamente il database.
L'avevo capito. Ciò è avvenuto principalmente perché ho cancellato per errore il database che Identity utilizzava e avevo bisogno di capire come recuperarlo.
Apparentemente non c'è niente di sbagliato nella mia stringa di connessione così com'è. Avevo solo bisogno di entrare nel gestore di pacchetti e digitare questi comandi in questo ordine:
Add-Migration init -Context PartsDbContext
Update-Database -Context PartsDbContext
L'ho scoperto perché è quello che dovevo fare per far funzionare nuovamente il mio ApplicationDbContext e si scopre che questo passaggio è fatto per te quando crei una nuova applicazione Web MVC Core in Visual Studio utilizzando l'autenticazione utente individuale.
Quindi in pratica i passaggi per aggiungere altri DbContexts è: