Entity Framework Core を使って C#、SQLite、.NET Core で初回起動時に自動的にデータベースを作成する
C#、SQLite、.NET Core で初回起動時に自動的にデータベースを作成する方法
Entity Framework Core は、.NET Core 向けのオープンソースのオブジェクト関係マッパー (ORM) です。ORM は、オブジェクトとデータベース間のマッピングを自動化してくれるツールです。
Entity Framework Core を使用して、初回起動時に自動的にデータベースを作成するには、以下の手順を行います。
- プロジェクトに Entity Framework Core の NuGet パッケージをインストールします。
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
- DbContext クラスを作成します。DbContext クラスは、データベースとの接続を表します。
public class MyContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=mydatabase.sqlite");
}
}
- MyEntity クラスを作成します。MyEntity クラスは、データベースに保存されるエンティティを表します。
public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
- Program.cs ファイルで、初回起動時にデータベースを作成するコードを追加します。
using (var context = new MyContext())
{
context.Database.EnsureCreated();
}
SQLiteOpenHelper クラスは、SQLite データベースとの接続を管理するためのヘルパークラスです。
dotnet add package SQLite.Net-PCL
- SQLiteOpenHelper クラスを継承したクラスを作成します。
public class MyOpenHelper : SQLiteOpenHelper
{
public MyOpenHelper(string databasePath) : base(databasePath)
{
}
public override void OnCreate(SQLiteConnection database)
{
database.CreateTable<MyEntity>();
}
}
- Program.cs ファイルで、SQLiteOpenHelper クラスを使用してデータベースを作成します。
using (var connection = new SQLiteConnection("mydatabase.sqlite"))
{
var helper = new MyOpenHelper(connection);
helper.CreateTable<MyEntity>();
}
ADO.NET を使用する方法
ADO.NET は、.NET Framework と .NET Core で提供されるデータアクセス技術です。
dotnet add package System.Data.SQLite
- SqlConnection クラスを使用してデータベース接続を作成します。
using (var connection = new SqlConnection("Data Source=mydatabase.sqlite"))
{
connection.Open();
// データベースが存在しない場合は作成する
var cmd = new SqlCommand("CREATE TABLE IF NOT EXISTS MyEntity (Id INTEGER PRIMARY KEY, Name TEXT)", connection);
cmd.ExecuteNonQuery();
}
これらの方法のいずれを使用しても、C#、SQLite、.NET Core でアプリケーション初回起動時に自動的にデータベースを作成することができます。
補足
- 上記の手順は、基本的なものです。必要に応じて、コードをカスタマイズする必要があります。
- データベースのスキーマを変更する場合は、コードも変更する必要があります。
- データベース接続文字列は、必要に応じて変更する必要があります。
Entity Framework Core を使用する方法
// プロジェクトファイル
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
// DbContext クラス
public class MyContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=mydatabase.sqlite");
}
}
// MyEntity クラス
public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
// Program.cs ファイル
using (var context = new MyContext())
{
context.Database.EnsureCreated();
}
SQLiteOpenHelper クラスを使用する方法
// プロジェクトファイル
dotnet add package SQLite.Net-PCL
// SQLiteOpenHelper クラスを継承したクラス
public class MyOpenHelper : SQLiteOpenHelper
{
public MyOpenHelper(string databasePath) : base(databasePath)
{
}
public override void OnCreate(SQLiteConnection database)
{
database.CreateTable<MyEntity>();
}
}
// Program.cs ファイル
using (var connection = new SQLiteConnection("mydatabase.sqlite"))
{
var helper = new MyOpenHelper(connection);
helper.CreateTable<MyEntity>();
}
ADO.NET を使用する方法
// プロジェクトファイル
dotnet add package System.Data.SQLite
// Program.cs ファイル
using (var connection = new SqlConnection("Data Source=mydatabase.sqlite"))
{
connection.Open();
// データベースが存在しない場合は作成する
var cmd = new SqlCommand("CREATE TABLE IF NOT EXISTS MyEntity (Id INTEGER PRIMARY KEY, Name TEXT)", connection);
cmd.ExecuteNonQuery();
}
以下に、その他の方法をいくつか紹介します。
FluentMigrator は、データベースマイグレーションのためのオープンソースのライブラリです。FluentMigrator を使用すると、コードベースを使用してデータベースのスキーマ変更を管理することができます。
dotnet add package FluentMigrator.Runner
dotnet add package FluentMigrator.Sqlite
- Migration クラスを作成します。Migration クラスは、データベースのスキーマ変更を記述します。
[Migration(1)]
public class CreateMyTable : Migration
{
public override void Up()
{
Create.Table("MyEntity")
.WithColumn("Id").AsInt32().PrimaryKey()
.WithColumn("Name").AsString();
}
public override void Down()
{
Delete.Table("MyEntity");
}
}
var runner = new MigrationRunner(
new SQLiteConnection("Data Source=mydatabase.sqlite"),
new FluentMigrator.Runner.AssemblyMigrationSource(typeof(CreateMyTable).Assembly));
runner.MigrateUp(1);
DbUp を使用する方法
DbUp は、データベースのスキーマ更新を自動化するオープンソースのツールです。DbUp は、SQL スクリプトを使用してデータベースのスキーマ変更を記述します。
dotnet add package DbUp.Core
dotnet add package DbUp.SQLite
- SQL スクリプトを作成します。SQL スクリプトは、データベースのスキーマを作成します。
CREATE TABLE MyEntity (
Id INTEGER PRIMARY KEY,
Name TEXT
);
var upgrader = new DbUp.Engine.UpgradeEngine(
new SQLiteConnection("Data Source=mydatabase.sqlite"),
new DbUp.ScriptProviders.EmbeddedScriptProvider());
upgrader.PerformUpgrade();
手動でデータベースを作成する方法
上記の方法以外にも、手動でデータベースを作成することもできます。
手動でデータベースを作成するには、以下の手順を行います。
- SQLite データベースファイルを作成します。
- アプリケーションを使用して、データベースのスキーマを作成します。
手動でデータベースを作成する方法は、他の方法よりも複雑ですが、より多くの柔軟性を提供します。
C#、SQLite、.NET Core で初回起動時に自動的にデータベースを作成するには、いくつかの方法があります。
上記の方法の中から、プロジェクトの要件に合った方法を選択してください。
c# sqlite .net-core