質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

320閲覧

asp.net core MVCでDB接続ができるようにしたい

mmm1007

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2024/05/19 04:29

編集2024/05/20 13:51

実現したいこと

asp.net core MVCでDB接続をしたくて
https://localhost:44338/XXX(Controller名)/TestDbContext
でアクセスするも画像のようなエラーが出る。

このエラーが発生する主な理由は、WebAppDBContext がサービスコンテナに正しく登録されていないか、または YahooRestaurantController がサービスコンテナによってインスタンス化されていないため

らしいがchatgptに聞いてもどこがおかしくて接続できないのかわかりませんでした。

発生している問題・分からないこと

イメージ説明

エラーメッセージ

error

1An unhandled exception occurred while processing the request. 2InvalidOperationException: Unable to resolve service for type 'WebApp.Models.WebAppDBContext' while attempting to activate 'WebApp.Controllers.YahooRestaurantController'. 3Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired) 4 5Stack Query Cookies Headers Routing 6InvalidOperationException: Unable to resolve service for type 'WebApp.Models.WebAppDBContext' while attempting to activate 'WebApp.Controllers.YahooRestaurantController'. 7Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired) 8lambda_method19(Closure , IServiceProvider , object[] ) 9Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider+<>c__DisplayClass7_0.<CreateActivator>b__0(ControllerContext controllerContext) 10Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider+<>c__DisplayClass6_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext) 11Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted) 12Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() 13Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted) 14Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) 15Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted) 16Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() 17Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) 18Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) 19Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) 20Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) 21Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

該当のソースコード

WebAppDBContext.cs

1using Microsoft.EntityFrameworkCore; 2 3namespace WebApp.Models 4{ 5 public class WebAppDBContext: DbContext 6 { 7 public WebAppDBContext(DbContextOptions<WebAppDBContext> options) : base(options) { } 8 public DbSet<YahooRestaurant> yahoo_restaurant { get; set; } 9 } 10}

Startup.cs

1using Microsoft.AspNetCore.Builder; 2using Microsoft.AspNetCore.Hosting; 3using Microsoft.Extensions.Configuration; 4using Microsoft.Extensions.DependencyInjection; 5using Microsoft.Extensions.Hosting; 6 7//DB情報追加 8using Microsoft.EntityFrameworkCore; 9using WebApp.Models; 10 11namespace WebApp 12{ 13 public class Startup 14 { 15 public void Configure(IApplicationBuilder app) 16 { 17 // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 18 } 19 20 //ここからconfigurationを設定 21 public Startup(IConfiguration configuration) 22 { 23 Configuration = configuration; 24 } 25 public IConfiguration Configuration { get; } 26 //ここまでconfigurationを設定 27 28 public void ConfigureServices(IServiceCollection services) 29 { 30 services.AddControllersWithViews(); 31 // 他のサービスの設定 32 // データベース接続文字列を取得し、DbContext をサービスコンテナに登録 33 services.AddDbContext<WebAppDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("WebAppDBConnectionString"))); 34 35 } 36 37 } 38} 39

appsettings.json

1{ 2 "Logging": { 3 "LogLevel": { 4 "Default": "Information", 5 "Microsoft.AspNetCore": "Warning" 6 } 7 }, 8 "AllowedHosts": "*", 9 "ConnectionStrings": { 10 "WebAppDBConnectionString": "Server=localhost\\SQLEXPRESS01;Database=WebApp;Trusted_Connection=True;" 11 } 12 13} 14

XXXController.cs

1using Azure; 2using Microsoft.AspNetCore.Mvc; 3using Newtonsoft.Json; 4using System.Diagnostics; 5using System; 6//追加 7using System.Linq; 8using System.Net; 9using WebApp.Models; 10using static Microsoft.EntityFrameworkCore.DbLoggerCategory; 11 12namespace WebApp.Controllers 13{ 14 public class YahooRestaurantController : Controller 15 { 16 17 private readonly WebAppDBContext _context; 18 19 public XXXController(WebAppDBContext context) 20 { 21 _context = context; 22 } 23 24 public IActionResult TestDbContext() 25 { 26 var test = _context.yahoo_restaurant.FirstOrDefault(); 27 if (test == null) 28 { 29 // データがない場合の処理 30 return NotFound("No restaurants found."); 31 } 32 return Ok(test); 33 } 34 } 35} 36

Program.cs

1//Webアプリケーションのビルダーを作成 2var builder = WebApplication.CreateBuilder(args); 3 4// Add services to the container. 5builder.Services.AddControllersWithViews(); 6 7//Webアプリケーションを構築 8var app = builder.Build(); 9 10// Configure the HTTP request pipeline. 11if (!app.Environment.IsDevelopment()) 12{ 13 app.UseExceptionHandler("/Home/Error"); 14 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. 15 app.UseHsts(); 16} 17 18app.UseHttpsRedirection(); 19app.UseStaticFiles(); 20 21app.UseRouting(); 22 23app.UseAuthorization(); 24 25app.MapControllerRoute( 26 name: "default", 27 pattern: "{controller=Home}/{action=Index}/{id?}"); 28 29app.Run(); 30

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

chatgptなどのやり方を参考にしているがエラーが解消されませんでした

補足

.NET6
Startup.csは手動で作成しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hqf00342

2024/05/20 09:40

このASP.NET (Core)プロジェクトのバージョンは何でしょうか。Program.csはトップレベルで書いているのでNET6以降かとも思いましたが、Startup.csもあり状況が分からないです。 Startup.csはテンプレートで作成されたものを修正していますか?それともどこかからのコピーなどで自分で作ったクラスでしょうか? 前提となる環境を書いてください。
guest

回答1

0

ベストアンサー

Program.csの記述から .NET6 以降と仮定します。

エラーの意味はWebAppDBContextがDIサービスとして登録されていない、という意味です。
提示のコードではそれをStartup.csConfigureServices()メソッドに書いてますが、.NET6以降ではこのクラスを使わないテンプレートになっています。
そのため、Startup.csは削除し、代わりにProgram.csに2行追加して登録します。

csharp:Program.cs

1//Webアプリケーションのビルダーを作成 2var builder = WebApplication.CreateBuilder(args); 3 4//2行追記 5var connectionString = builder.Configuration.GetConnectionString("WebAppDBConnectionString"); 6builder.Services.AddDbContext<WebAppDBContext>(options =>options.UseSqlServer(connectionString)); 7//追記終わり。以下は同じ 8 9// Add services to the container. 10builder.Services.AddControllersWithViews(); 11...

投稿2024/05/20 12:48

編集2024/05/20 12:53
hqf00342

総合スコア351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmm1007

2024/05/25 13:47

おっしゃる通りバージョンが.NET6でした。おかげさまで解決することができました。 startup.csは廃止されていたのですね、勉強になりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問