Entity Framework CoreでSQLiteデータベース操作
C#/.NET と SQLite データベース
ADO.NET
ADO.NET は、.NET Framework で提供されるデータアクセス技術です。SQLite 用の ADO.NET プロバイダである System.Data.SQLite
を使用することで、C#/.NET アプリケーションから SQLite データベースにアクセスできます。
ADO.NET を使用した SQLite データベースへの接続
- NuGet パッケージマネージャーを使用して、
System.Data.SQLite
パッケージをインストールします。 - 以下のコードを使用して、データベースへの接続を開きます。
using (var connection = new SQLiteConnection("Data Source=database.sqlite"))
{
// データベース操作
}
- データベースへの接続を開いたら、
SqlCommand
オブジェクトを使用して、クエリを実行したり、データを取得したり、変更したりできます。
ADO.NET の利点と欠点
利点:
- .NET Framework に標準で搭載されているため、追加のライブラリをインストールする必要がない
- 豊富な機能
欠点:
- コード量が比較的多い
- 習得に時間がかかる
Entity Framework Core
Entity Framework Core は、.NET 用のオープンソースのオブジェクト関係マッパー (ORM) です。ORM は、オブジェクトとデータベース間のマッピングを自動化してくれるツールです。
Entity Framework Core を使用した SQLite データベースへの接続
- NuGet パッケージマネージャーを使用して、
Microsoft.EntityFrameworkCore.Sqlite
パッケージをインストールします。
using (var context = new MyContext("Data Source=database.sqlite"))
{
// データベース操作
}
- データベースへの接続を開いたら、
DbSet<T>
プロパティを使用して、エンティティの操作を行うことができます。
Entity Framework Core の利点と欠点
- コード量が少なく、開発効率が高い
- オブジェクト指向で直感的な操作
- ADO.NET に比べて機能が制限されている
- 複雑なクエリを実行する場合は、ADO.NET の方が効率的な場合がある
上記以外にも、SQLite と .NET/.NET Core を連携するためのライブラリが多数存在します。
- Dapper: 軽量で高速な ORM
- LiteDB: 軽量で使いやすい NoSQL データベース
- SQLitePCL.raw: SQLite へのネイティブアクセスを提供
これらのライブラリはそれぞれ、独自の機能や利点を持っています。
using System.Data.SQLite;
public class Program
{
public static void Main(string[] args)
{
// データベースへの接続を開く
using (var connection = new SQLiteConnection("Data Source=database.sqlite"))
{
connection.Open();
// クエリを実行して結果を取得する
using (var command = new SQLiteCommand("SELECT * FROM テーブル", connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
// 読み込んだデータ処理
Console.WriteLine($"{reader["列名1"]}, {reader["列名2"]}");
}
}
}
// データの更新
using (var command = new SQLiteCommand("UPDATE テーブル SET 列名1 = @value1 WHERE 列名2 = @value2", connection))
{
command.Parameters.AddWithValue("@value1", "新しい値");
command.Parameters.AddWithValue("@value2", "検索条件");
command.ExecuteNonQuery();
}
}
}
}
using Microsoft.EntityFrameworkCore;
public class MyContext : DbContext
{
public MyContext(string connectionString) : base(connectionString)
{
}
public DbSet<MyEntity> MyEntities { get; set; }
}
public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
// データベースへの接続を開く
using (var context = new MyContext("Data Source=database.sqlite"))
{
// エンティティの追加
var entity = new MyEntity { Name = "新しいエンティティ" };
context.MyEntities.Add(entity);
context.SaveChanges();
// エンティティの取得
var entities = context.MyEntities.ToList();
foreach (var entity in entities)
{
Console.WriteLine($"{entity.Id}, {entity.Name}");
}
// エンティティの更新
var entityToUpdate = context.MyEntities.Find(1);
entityToUpdate.Name = "更新後の名前";
context.SaveChanges();
}
}
}
直接アクセス
SQLite は軽量なデータベースであり、C 言語で記述されています。そのため、C#/.NET から直接 SQLite へのアクセスも可能です。ただし、この方法は複雑で、高度な知識が必要となります。
他の ORM ツール
Entity Framework Core 以外にも、C#/.NET 用の ORM ツールが多数存在します。
- NHibernate: 老舗の ORM ツール
- Fluent NHibernate: NHibernate の設定をより簡潔に記述するためのツール
- RavenDB: NoSQL データベース向けの ORM ツール
独自のライブラリ
c# .net database