Blazor Serverにて気象データをグラフ化するWebアプリを作成する: SQL Server 接続編
完成イメージ
Blazor Serverにて気象データをグラフ化するWebアプリを作成する
前提
- Visual Studio 2019
- SQL Serverの基礎知識
- Microsoft Blazor Server Tutorial終了
Step 1: Blazor Server新規プロジェクトの作成
- Visual Studio 2019にて新規作成→プロジェクト→Blazor Serverアプリ→.NET 5.0
- Ctrl+F5でアプリが起動することを確認する。
Step 2: SQL Server準備
- Visual Studio SQL サーバオブジェクトエクスプローラーを表示
- (localdb)\MSSQLLocalDBにデータベース「Forecast」を作成
- appsettings.jsonに接続文字列追加
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=Forecast;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": {
Step 3: EF CoreインストールとモデルのMigration
- Nugetパッケージの管理から下記インストール
- Data\WeatherForecast.csに求めるテーブル構造にあわせてプロパティを追加する
- 日付、最高気温、最低気温、平均気温、降水量、日照時間をフィールドとするテーブル構造にする
[Table("WeatherForecast")] public class WeatherForecast { public int Id { get; set; } [DisplayName("日付")] public DateTime Date { get; set; } [DisplayName("最高気温")] public double HighestTemperature { get; set; } [DisplayName("最低気温")] public double LowestTemperature { get; set; } [DisplayName("平均気温")] public int Temperature { get; set; } [DisplayName("降水量")] public double Precipitation { get; set; } [DisplayName("日照時間")] public double DaylightHours { get; set; } }
- Pages\Fetchdata.razor、Data\WeatherForecastService.csがコンパイルエラーにならないよう、一旦日付と平均気温のみ表示するよう修正する
- Data\WeatherForecastDbContext.cs追加
public class WeatherForecastDbContext : DbContext { public WeatherForecastDbContext(DbContextOptions<WeatherForecastDbContext> options) : base(options) { } public DbSet<WeatherForecast> WeatherForecast { get; set; } }
- Startup.csのConfigureServicesでAddDbContext呼び出し追加。
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<WeatherForecastDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"), providerOptions => providerOptions.CommandTimeout(120))); services.AddRazorPages();
- パッケージマネージャーコンソール起動
- Add-Migration 成功後、Update-database実行。
PM> Add-Migration InitialCreate Build started... Build succeeded. To undo this action, use Remove-Migration. PM> Update-database Build started... Build succeeded. Done.
Step 4: BlazorからSQL Serverデータを取得し表示する
- Data\WeatherForecastService.csを修正。SQL Serverからデータを取得するメソッドを実装。
public class WeatherForecastService { WeatherForecastDbContext _Context { get; } public WeatherForecastService(WeatherForecastDbContext context) => _Context = context; public Task<List<WeatherForecast>> GetForecastAsync() => _Context.WeatherForecast .OrderBy(x => x.Id) .ToListAsync(); }
- Pages\FetchData.razorでForecastService.GetForecastAsyncをパラメータ無しで呼び出すよう変更。あわせて戻り値をList<>型に変更する。
private List<WeatherForecast> forecasts; protected override async Task OnInitializedAsync() { forecasts = await ForecastService.GetForecastAsync(); }
- Startup.csのConfigureServicesメソッド内でAddSingletonを削除してAddScopedに変更。
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<WeatherForecastDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"), providerOptions => providerOptions.CommandTimeout(120))); services.AddRazorPages(); services.AddServerSideBlazor(); services.AddScoped<WeatherForecastService>(); }
- Ctrl+F5にてアプリを起動。FetchDataページの動作を確認する。
Step 5: テストデータを入れて動作確認する
- 次のSQLにてテストデータをインサート
insert into WeatherForecast (Date,HighestTemperature,LowestTemperature,Temperature,Precipitation,DaylightHours) values(cast('2020/01/01' as date),10.7,3.7,6.9,0,6) insert into WeatherForecast (Date,HighestTemperature,LowestTemperature,Temperature,Precipitation,DaylightHours) values(cast('2020/01/02' as date),11.8,3,8.2,0,9.3) insert into WeatherForecast (Date,HighestTemperature,LowestTemperature,Temperature,Precipitation,DaylightHours) values(cast('2020/01/03' as date),13.5,6.6,10.3,0,5.9) insert into WeatherForecast (Date,HighestTemperature,LowestTemperature,Temperature,Precipitation,DaylightHours) values(cast('2020/01/04' as date),12.5,6.4,9.6,0,7.2) insert into WeatherForecast (Date,HighestTemperature,LowestTemperature,Temperature,Precipitation,DaylightHours) values(cast('2020/01/05' as date),10.3,5.3,7,0,4)
- Ctrl+F5にてアプリを起動。FetchDataページの動作を確認する。