SQLite を ASP.NET Core で Entity Framework Core と共に使用する方法の他の方法
ASP.NET Core で SQLite を Entity Framework Core と共に使用する方法
この解説では、ASP.NET Core で SQLite データベースを Entity Framework Core と共に使用する方法について説明します。Entity Framework Core は、C# アプリケーションでデータベースとやり取りするための強力な ORM (Object-Relational Mapping) フレームワークです。
必要なもの
- Visual Studio 2022 または .NET SDK
- SQLite データベース
手順
- 新しい ASP.NET Core MVC プロジェクトを作成します。
- NuGet パッケージマネージャーを使用して、以下のパッケージをインストールします。
Microsoft.EntityFrameworkCore.Sqlite
appsettings.json
ファイルに、以下の接続文字列を追加します。
"ConnectionStrings": {
"DefaultConnection": "Data Source=MyDatabase.sqlite"
}
- データベースモデルを表すクラスを作成します。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
DbContext
クラスを作成し、データベースモデルと接続文字列を関連付けます。
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options)
: base(options)
{
}
public DbSet<Person> People { get; set; }
}
6. データベースへのアクセスと操作を行うコードを記述します。
using (var context = new MyContext())
{
// データベースに新しい人物を追加
var person = new Person { Name = "John Doe", Age = 30 };
context.People.Add(person);
context.SaveChanges();
// データベースからすべての人物を読み込む
var people = context.People.ToList();
// 特定の人物を見つける
var person = context.People.Find(1);
// 人物の情報を更新
person.Name = "Jane Doe";
context.SaveChanges();
// 人物を削除
context.People.Remove(person);
context.SaveChanges();
}
- アプリケーションを実行して、データベースとのやり取りを確認します。
詳細
- Entity Framework Core には、SQLite 以外にも様々なデータベースプロバイダが用意されています。
- 上記のコード例では、コードの簡潔化のために、エラー処理などのコードは省略されています。
- 実務で使用する場合は、適切なエラー処理やセキュリティ対策を行う必要があります。
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using MyContext;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using MyContext;
public class Startup
{
// This method gets called by the runtime and is used to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyContext>(options =>
options.UseSqlite("Data Source=MyDatabase.sqlite"));
services.AddControllersWithViews();
}
// This method gets called by the runtime and is used to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Models/Person.cs
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Controllers/HomeController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using MyContext;
using System.Collections.Generic;
using System.Linq;
public class HomeController : Controller
{
private readonly MyContext _context;
public HomeController(MyContext context)
{
_context = context;
}
public IActionResult Index()
{
// データベースからすべての人物を読み込む
var people = _context.People.ToList();
return View(people);
}
public IActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Person person)
{
if (ModelState.IsValid)
{
// データベースに新しい人物を追加
_context.People.Add(person);
_context.SaveChanges();
return RedirectToAction(nameof(Index));
}
return View(person);
}
public IActionResult Edit(int id)
{
// 特定の人物を見つける
var person = _context.People.Find(id);
if (person == null)
{
return NotFound();
}
return View(person);
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit(int id, Person person)
{
if (id != person.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
// 人物の情報を更新
_context.People.Update(person);
_context.SaveChanges();
return RedirectToAction(nameof(Index));
}
return View(person);
}
public IActionResult Delete(int id)
{
// 特定の人物を見つける
var person = _context.People.Find(id);
if (person == null)
{
return NotFound();
}
return View(person);
}
[HttpPost, ActionName
SQLite を ASP.NET Core で Entity Framework Core と共に使用する方法の他の方法
Entity Framework Core の Migrations を使用
Entity Framework Core の Migrations を使用すると、データベーススキーマを自動的に作成および更新することができます。Migrations を使用するには、以下の手順が必要です。
- NuGet パッケージマネージャーを使用して、
Microsoft.EntityFrameworkCore.Tools
パッケージをインストールします。 dotnet ef migrations add InitialCreate
コマンドを実行して、最初のマイグレーションを作成します。dotnet ef database update
コマンドを実行して、データベーススキーマを更新します。
SQLitePCL.raw を使用
SQLitePCL.raw は、SQLite と .NET Framework および .NET Core の間のネイティブインターフェースを提供します。SQLitePCL.raw を使用すると、Entity Framework Core 以外の方法で SQLite データベースにアクセスすることができます。
Dapper を使用
Dapper は、.NET Framework および .NET Core 用の軽量なマイクロORMです。Dapper を使用すると、Entity Framework Core 以外の方法で SQLite データベースにアクセスすることができます。
Entity Framework Core 以外にも、さまざまな ORM ツールが利用可能です。これらのツールの中には、SQLite を含むさまざまなデータベースをサポートするものがあります。
c# asp.net-mvc sqlite