ASP .NET Coreのメモ
Entity Framework Core (EF Core) は、.NET 用の最新のオブジェクトデータベースマッパー(ORM)です。厳密に型指定された .NET オブジェクトと LINQ のサポートを使用することで、さまざまなデータベース(Azure Cosmos DB、MySQL、PostgreSQL、SQL Server、SQLite など)の操作が簡略化されます²。
以下は EF Core の主な特徴と概要です:
- 軽量版の Entity Framework であり、拡張性に優れ、オープンソースで、プラットフォームに依存しません。
- .NET 開発者が .NET オブジェクトを使用してデータベースを操作できるようにします。
- 通常記述しなければならないデータアクセスコードの多くを不要にします。
- 多くのデータベースエンジンに対応しています。詳細については、「Database Providers」を参照してください。
EF Core は、モデルを利用してデータアクセスを実行します。モデルはエンティティクラスと、データベースとのセッションを表すコンテキストオブジェクトから構成されます。このコンテキストオブジェクトにより、データのクエリと保存が可能になります。モデルの作成には、既存のデータベースから生成する方法や手動でコードを書く方法があります。また、EFの移行を使用してモデルからデータベースを作成できます。移行により、モデルの変更に応じてデータベースを進化させることができます。
以下は、簡単な EF Core のコード例です:
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace Intro
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True");
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
このコードでは、BloggingContext
クラスがデータベースとのやり取りを担当しています。DbSet<Blog>
と DbSet<Post>
はエンティティクラスを表し、データベースのテーブルと対応しています。クエリ実行やデータの保存は、このコンテキストを介して行われます。
DbContext
は、MicrosoftのEntity FrameworkというORM(Object-Relational Mapping)フレームワークの中心的なクラスです¹²³⁴.
主な役割は以下の通りです:
-
データベースとのセッションを表現:
DbContext
インスタンスはデータベースとのセッションを表し、エンティティのインスタンスのクエリと保存に使用できます⁴. -
データベース操作の抽象化:
DbContext
クラスを利用することで、データベースへの検索、更新、登録、削除といった基本的な操作を行うことができます¹. -
データベースとの接続管理:
DbContext
はデータベースへの接続を管理し、その接続を通じてデータベース操作を行います¹.
また、DbContext
は以下のような特性も持っています:
- モデルのルートエンティティのプロパティをDbSet<TEntity>として含む: これらのセットは、派生クラスのインスタンスの作成時に自動的に初期化されます².
- Unit Of Work パターンと Repository パターンの組み合わせを表す: このパターンを使用して、データベースからクエリを実行し、変更をグループ化して、ユニットとしてストアに書き戻すことができます².
-
ObjectContextの軽量な代替品:
DbContext
は、ObjectContextの軽量な代替品であり、ObjectContextのラッパーとも言えます⁵.
ただし、DbContext
を利用する際には、内容はDispose(破棄)するまで保持され続けます。さらに、DbContext
は内部に設定したオブジェクトの状態を保持していますので、大量データを扱う場合は、メモリ不足に陥る場合があります¹. 以上の点に注意することが必要です.
(1) 【Entity Framework】DbContextクラスを作成してデータベース .... https://www.fenet.jp/dotnet/column/dot-net/2584/.
(2) DbContext クラス (System.Data.Entity) | Microsoft Learn. https://learn.microsoft.com/ja-jp/dotnet/api/system.data.entity.dbcontext?view=entity-framework-6.2.0.
(3) Entity Frameworkとは?概要や仕組みについて – Rainbow Engine. https://rainbow-engine.com/whatis-entity-framework/.
(4) DbContext クラス (Microsoft.EntityFrameworkCore). https://learn.microsoft.com/ja-jp/dotnet/api/microsoft.entityframeworkcore.dbcontext?view=efcore-8.0.
(5) DBContextとObjectContextの違いとは?分かりやすく解説 .... https://toumaswitch.com/fsbxbvbcpw/.
DbSet<TEntity>
は、MicrosoftのEntity FrameworkというORM(Object-Relational Mapping)フレームワークの重要なクラスで、特定の型のエンティティのコレクションを表します¹².
主な特性と機能は以下の通りです:
-
エンティティのコレクションを表現:
DbSet
は、コンテキスト内のすべてのエンティティのコレクション、または特定の型のデータベースからクエリを実行できるエンティティのコレクションを表します¹. -
データベース操作の抽象化:
DbSet
クラスを利用することで、データベースへの検索、更新、登録、削除といった基本的な操作を行うことができます¹. -
データベースとの接続管理:
DbSet
はデータベースへの接続を管理し、その接続を通じてデータベース操作を行います¹. -
主キーによるエンティティの検索:
Find
メソッドを使用して、指定された主キー値を持つエンティティを検索することができます¹. -
エンティティの追加と削除:
Add
メソッドやRemove
メソッドを使用して、エンティティを追加または削除することができます¹.
ただし、DbSet
を利用する際には、型とセットの間には常に1対1の相関関係があることに注意が必要です¹.
(1) DbSet<TEntity> クラス (System.Data.Entity) | Microsoft Learn. https://learn.microsoft.com/ja-jp/dotnet/api/system.data.entity.dbset-1?view=entity-framework-6.2.0.
(2) DbSet の定義 - EF6 | Microsoft Learn. https://learn.microsoft.com/ja-jp/ef/ef6/modeling/code-first/dbsets.
(3) [.NET] [C#]Entity Framework Coreを使用してDBアクセス・OR .... https://qiita.com/suganury/items/067ad7c39cab108f6b5b.
Entity Frameworkは、MicrosoftのADO.NETの一部で、データ指向のソフトウェアアプリケーション開発をサポートするテクノロジーセットです²³. 主な特性と機能は以下の通りです:
- データ操作の抽象化: Entity Frameworkを使用すると、開発者はデータを操作する際に高い抽象化レベルで作業ができ、従来のアプリケーションよりコードの少ないデータ指向アプリケーションの作成と保守が可能になります².
- ドメイン固有のオブジェクトでデータを扱う: Entity Frameworkを使用することで、開発者は、顧客や顧客の住所など、ドメイン固有のオブジェクトおよびプロパティの形式でデータを扱うことができます².
- データベースとの接続管理: Entity Frameworkは、データベースとの接続と操作をより簡潔に行えるようにするためのものです⁴.
- モデルの利用: Entity Frameworkでは、開発者がドメインモデル内のエンティティとリレーションシップにクエリを実行し、Entity Frameworkがそれらの操作をデータソース固有のコマンドに変換するという形で、モデルが利用されます².
ただし、Entity Frameworkを使用する際には、データベースのテーブルや列の構造をそこまで意識する事なく、より簡潔なコードを組む事ができます¹. 以上の点に注意することが必要です.
(1) Entity Framework の概要 - ADO.NET | Microsoft Learn. https://learn.microsoft.com/ja-jp/dotnet/framework/data/adonet/ef/overview.
(2) Entity Framework - Wikipedia. https://ja.wikipedia.org/wiki/Entity_Framework.
(3) スタッフコラム: Entity Frameworkについて | 株式会社メディアプラン. https://media-plan.co.jp/column_detail.php?key=876.
(4) Entity Frameworkとは?概要や仕組みについて – Rainbow Engine. https://rainbow-engine.com/whatis-entity-framework/.