現在、ASP.NET Core 3.0とBlazorを使ってWebサーバーを構築する方法を勉強中です。  
ネット上のチュートリアルなどを探したところ、次のようなURLを使ったWebAPIを使ってSQLサーバーなどのデータベースにアクセスする方法が見られました。

```

    var url = "http://localhost:99999/api/item";
    var response = new HttpClient().GetStringAsync(url);
    var item = JsonConvert.Deserialize<Item>(response);
    
```

このようにWebAPIを通してデータベースにアクセスするのではなく、例えば次のようにWEBページ内に書かれたC#で直接データベースにアクセスする方法はないものでしょうか？

```

    var context = GetContext();   //DbContextへいい感じにアクセス
    var items = context.Items;    //DbContextオブジェクトからほしいオブジェクトを直接もらう
    
```

あいまいな質問になって申し訳ありませんがよろしくお願いします。
CC BY-SA 4.0
2019-07-15T15:22:08.230
56664
2023-02-02T06:02:30.230
35121
question
asp.net entity-framework asp.net-core .net-core
ASP.NET Core 3.0でWebAPIを使わず直接DbContextにアクセスする方法
Blazorは使ったことないですが、  
EintitiFrameworkCoreなら、Scaffoldingしちゃうのが一番楽だと思います。

```

    Scaffold-DbContext "server=(local);user id=sa;Password=;database=DatabaseName" "Microsoft.EntityFrameworkCore.SqlServer" -OutputDir Models -f
    
```

参考URL：  
<https://docs.microsoft.com/ja-jp/ef/core/managing-
schemas/scaffolding?tabs=dotnet-core-cli>
CC BY-SA 4.0
2020-09-08T03:57:13.920
70220
2020-09-08T04:32:48.880
2020-09-08T04:32:48.880
3060
8647
56664
answer
> Blazorを使ってWebサーバーを構築する方法を勉強中です

Blazor で Web サーバーというのがピンときませんが（何か勘違いがあるのではと思いますが）、とりあえずそれは置いといて・・・

Blazor WebAssembly
ホスティングモデルの場合は以下の記事の図などを見ると全てクライアント側で完結しているように見えますが、結局それはブラウザの中で動いているわけで、サーバー側にあるデータの取得などでクライアント/サーバー間のやり取りを行う場合は
HTTP 通信で行うことになります。

ASP.NET Core Blazor のホスティング モデル  
<https://docs.microsoft.com/ja-jp/aspnet/core/blazor/hosting-
models?view=aspnetcore-3.1>

なので、Blazor で書くクライアント側の C# のコードで、

> var context = GetContext(); //DbContextへいい感じにアクセス  
>  var items = context.Items; //DbContextオブジェクトからほしいオブジェクトを直接もらう

のように書いて「いい感じにアクセス」ということは、自分が知る限りですが、あり得ないと思います。

いい感じにやってもらえるよう、自力でコードを書いて、そのあたりをうまくラップして HTTP
通信をしてくれる仕組みを実装することまで考えるなら話は別かもしれませんが、そこまでは考えてないですよね？

質問に書いたような HttpClient を使ったコードは書きたくないということであれば、Razor ページに JSRuntime を DI し
JavaScript を使って ajax で要求を出すという方法はあります。詳しくは以下の記事を見てください。

ASP.NET Core Blazor で .NET メソッドから JavaScript 関数を呼び出す  
<https://docs.microsoft.com/ja-jp/aspnet/core/blazor/call-javascript-from-
dotnet?view=aspnetcore-3.1>

ただ、その場合も「DbContextへいい感じにアクセス」とか「DbContextオブジェクトからほしいオブジェクトを直接もらう」のはアクセス先のサーバー側で行うことには変わりありません。
CC BY-SA 4.0
2021-01-04T04:37:03.240
73057
2021-01-04T04:37:03.240
43387
56664
answer