PartsDbContextのフィールドにアクセスしようとすると、次のエラーが発生するという問題があります。
System.Data.SqlClient.SqlException: '無効なオブジェクト名' fieldName '
これは、PartsDbContextにIdentityで使用されるApplicationDbContextと同じデータベースを使用させようとしているためだと思われます。別のデータベースを使用/作成するEFコアで動作するように、2番目のdbcontextをセットアップする方法を知る必要があります。
2番目の接続文字列を作成しようとしましたが、このエラーが発生します。
System.Data.SqlClient.SqlException: 'ログインで要求されたデータベース "PartsDb"を開けません。ログインに失敗しました。ユーザー「DESKTOP-4VPU567\higle」のログインに失敗しました。
私のコードは次のとおりです。
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);
}
}
_
行var model = _context.Towers.ToList();
は、エラーが表示される場所です。
もう一度。 EF-Coreがデータベースを自動的に作成するように、Entity Framework Coreと連携するようにPartsDbContextをセットアップしたい。
私はそれを考え出した。これは主に、Identityが使用しているデータベースを誤って削除してしまい、それを取り戻す方法を見つける必要があったために生じました。
どうやら私の接続文字列に問題はないようです。パッケージマネージャーに移動して、これらのコマンドを次の順序で入力する必要がありました。
Add-Migration init -Context PartsDbContext
Update-Database -Context PartsDbContext
これは、ApplicationDbContextを再び機能させるために必要なことであり、個々のユーザー認証を使用してVisual Studioで新しいMVCコアWebアプリケーションを作成すると、この手順が実行されることがわかったためです。
したがって、基本的にDbContextを追加する手順は次のとおりです。