マスター エンティティ フレームワーク:50 の重要な面接の質問と回答 (2026)
Entity Framework の面接の準備をするということは、実際の能力を明らかにする質問を予想することを意味します。 Entity Framework の面接の質問により、考え方、パフォーマンスに対する意識、候補者がコンセプトを実践に移す方法が明らかになります。
Entity Framework をマスターすると、データ駆動型プラットフォームからクラウド サービスに至るまで、最新の開発全体で役割が開かれます。実践的な経験により、分析能力が構築され、技術的な深みが強化され、チームがサポートされます。採用リーダーは、実践的な問題解決、拡張性のある設計、後輩の指導、新卒者の成長パスを重視します。
続きを読む…👉 無料 PDF ダウンロード:Entity Framework のインタビューの質問と回答
1) Entity Framework とは何ですか?なぜ使用されるのですか?
Entity Framework (EF) は、Microsoft の .NET 用 ORM (オブジェクト リレーショナル マッピング) フレームワークであり、 開発者が生の SQL ではなく、 厳密に型指定された .NET オブジェクトとしてデータを操作できるようにすることでデータベースの対話を簡素化します。 。この抽象化により、開発者は使い慣れた C# 構造を使用して CRUD (作成、読み取り、更新、削除) 操作を実行でき、フレームワークはこれらの操作を内部で最適化された SQL クエリに変換します。 EF は定型的なデータ アクセス コードを削減し、保守性を向上させ、コンパイル時の型安全性の強化に役立ちます。
たとえば、SQL を記述する代わりに、以下を使用できます。
var customers = context.Customers.Where(c => c.IsActive).ToList();
EF は、この LINQ クエリを SQL に変換し、データベースに対して実行し、結果をオブジェクトとして返します。
2) コード ファースト、データベース ファースト、モデル ファーストのアプローチの違いを説明します。
Entity Framework は、次の 3 つの主要な開発アプローチをサポートしています。
各アプローチはさまざまなシナリオに対応します:コード ファースト アジャイル開発では人気があり、データベースファーストです。 レガシー データベースでは優先され、モデル ファーストです。 視覚的なモデリングが重要な場合に適しています。
3) DbContext とは何ですか?また、EF でどのような役割を果たしますか?
DbContext はデータベースとのセッションを管理するプライマリクラスです。 、エンティティの変更を追跡し、データベースへのデータの保存を調整します。これは、C# アプリケーションとデータベースの間のブリッジを表します。 DbContext まで 、DbSet<TEntity> を定義します プロパティ。エンティティのコレクションを表し、データベース内のテーブルにマップされます。
例:
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
ここでは、Products CRUD 操作を実行するためのコレクションとして機能します。 EF はこのコンテキストを使用してオブジェクトの状態を追跡します。 SaveChanges() で SQL コマンドを生成します .
4) Entity Framework の移行とは何ですか?また、その使用方法は何ですか?
移行 スキーマの変更を追跡および適用するメカニズムです。 時間の経過とともにデータベースに保存されます。モデルが進化するにつれて、移行により SQL スクリプトを手動で変更することなくデータベースの同期を維持できます。 Code First では、次のようなコマンドを使用します。
Add-Migration InitialCreate Update-Database
これにより、スキーマの変更を定義する移行クラスが生成され、それがデータベースに適用されます。移行により、データベース スキーマのバージョン管理が可能になり、共同開発が容易になります。
5) 遅延読み込み、即時読み込み、および明示的読み込みについて説明します。
EF では、関連データを効率的に読み込むことが重要です。比較は次のとおりです。
.Include() 経由で事前にロードされます 関連データが必要であることがわかっている場合に使用します。明示的な読み込み クエリ後に手動でロード関連データがロードされるタイミングを正確に制御できます。 例:
var orders = context.Orders.Include(o => o.Customer).ToList(); // Eager
遅延読み込みは最初のクエリを減らすのに役立ちますが、N+1 クエリの問題を引き起こす可能性があります。 慎重に使用しないと。
6) Entity Framework の変更追跡とは何ですか?
変更追跡はエンティティの状態変化を監視するためのEFの内部メカニズムです。 クエリの実行後。エンティティが DbContext によって取得された場合 、追跡されます。プロパティへの変更はすべて記録され、SaveChanges() の場合 が呼び出されると、EF は適切な SQL INSERT を生成します。 、UPDATE 、または DELETE 発言。追跡が不要な読み取り専用シナリオの場合は、AsNoTracking() 変更追跡を無効にすることでパフォーマンスが向上します。
7) Entity Framework は同時実行の競合をどのように処理しますか?
同時実行制御により、同じデータを更新する複数のユーザーが互いの変更を意図せず上書きしないことが保証されます。 EF はオプティミスティック同時実行性を使用します。 デフォルトでは。一般的なアプローチには、同時実行トークンを追加することが含まれます。 (RowVersion のような タイムスタンプ)。 EF は SaveChanges() 中にこのトークンをチェックします。 、データベースのバージョンと異なる場合は、DbUpdateConcurrencyException がスローされ、競合が発生していることを示します。その後、開発者はこの例外を処理して、データの相違を再試行または解決できます。
8) EF のナビゲーション プロパティとは何ですか?
ナビゲーション プロパティはエンティティ間の関係を定義します。これらにより、EF は関連付けをナビゲートできるようになります。 (例:1 対多) 手動結合なし:
public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
}
ここでは、Customer Order にリンクするナビゲーション プロパティです。 関連する Customer へ 。 EF はこれらのプロパティを使用して関係を構築し、クエリ中に自動的に結合します。ナビゲーション プロパティは外部キーと連携して機能します。 関係をモデル化します。
9) AsNoTracking() の目的は何ですか?
AsNoTracking() クエリの変更追跡を無効にします。これは読み取り専用の場合に有益です。 取得したエンティティを更新するつもりのない操作。これにより、メモリ使用量と追跡オーバーヘッドが削減され、パフォーマンスが向上します。これは、大規模なデータ セットを変更せずにフェッチする場合に特に便利です。
10) コンパイルされたクエリとは何ですか?いつ使用する必要がありますか?
コンパイルされたクエリはパフォーマンスを最適化する手法です。 LINQ クエリが実行されると、通常、EF は毎回それを SQL に変換します。コンパイルされたクエリでは、この変換が 1 回だけ行われ、結果のデリゲートが再利用されるため、頻繁に実行されるクエリや複雑なクエリのオーバーヘッドが削減されます。 交通量の多い場所で使用してください。 同じクエリが異なるパラメータで繰り返し実行されるシナリオ。
11) Entity Framework のエンティティの状態とは何ですか?また、それらは SaveChanges() にどのように影響しますか?
Entity Framework は各エンティティの状態を追跡します。 SaveChanges() 中に実行するデータベース操作を決定する 。主なエンティティの状態は次のとおりです。
INSERT 変更済み 既存のエンティティが更新されましたUPDATE 削除されました エンティティは削除対象としてマークされましたDELETE 変更なし 変更は検出されませんでした切り離されました コンテキストによって追跡されないNone
SaveChanges() を呼び出すとき , EF はエンティティの状態を検査し、対応する SQL コマンドを実行します。たとえば、新しいエンティティが DbSet に追加されたとします。 追加とマークされます 、結果は INSERT になります。 クエリ。
例:
context.Entry(product).State = EntityState.Modified; context.SaveChanges();
これにより、エンティティのデータベース レコードが明示的に更新されます。
状態を理解する データの同期とパフォーマンスをより適切に制御できるようになります。
12) Entity Framework を使用する利点と欠点は何ですか?
Entity Framework には強力な利点がありますが、ユースケースによってはいくつかのトレードオフもあります。
最大のパフォーマンスを必要とする大規模システムの場合、開発者は依然として生の SQL と EF を混合する場合があります。
13) Entity Framework は関係 (1 対 1、1 対多、多対多) をどのように処理しますか?
Entity Framework はナビゲーション プロパティを介して関係を管理します。 および外部キーの関連付け .
関係の種類は次のとおりです。
User ↔ UserProfile 1 対多 1 つのエンティティが他の複数のエンティティに関連しています。Customer → Orders 多対多 複数のエンティティが相互に関連しています。Student ↔ Course 1 対多の例 関係:
public class Customer
{
public int CustomerId { get; set; }
public ICollection<Order> Orders { get; set; }
}
EF は外部キーを自動的に生成し、カスケード削除ルールを処理します。 設定に応じて異なります。
Fluent API を使用することもできます。 より明示的な関係マッピングについては。
14) LINQ to Entities と LINQ to SQL の違いは何ですか?
エンティティへの LINQ Entity Framework の一部であり、より汎用性が高い一方、LINQ to SQL SQL Server およびより単純な使用例に限定されます。
したがって、エンタープライズ レベルの開発には LINQ to Entities をお勧めします。
15) ObjectContext と DbContext の違いは何ですか?
DbContext 内部的に ObjectContext をラップします ただし、よりクリーンで直感的な API を提供します。現在のほとんどの .NET アプリケーションでは DbContext を使用する必要があります。 .
16) Entity Framework のエンティティのライフサイクルを説明します。
エンティティのライフサイクルは、 エンティティの状態遷移を表します。 作成から永続化まで:
<オル>DbSet.Add() 経由でコンテキストに追加されました (状態:追加 ).SaveChanges() 呼び出される → SQL コマンドが実行される。このライフサイクルを理解すると、データの問題のデバッグや EF コンテキスト管理の最適化に役立ちます。
17) Entity Framework での Fluent API の使用法は何ですか?
Fluent API OnModelCreating() でよく使用される、モデルの関係、制約、マッピングをプログラムで構成する方法を提供します。 DbContext のメソッド .
これにより、データの注釈を含む構成をきめ細かく制御できます。 表現できません。
例:
modelBuilder.Entity<Customer>() .HasMany(c => c.Orders) .WithOne(o => o.Customer) .HasForeignKey(o => o.CustomerId);
Fluent API は、複合キーの構成に特に強力です。 、多対多のリレーション 、 そしてカスケード ルール .
18) Entity Framework のデータ アノテーションとは何ですか?
データの注釈は属性です。 モデルのクラスまたはプロパティに直接適用して、スキーマの動作を定義します。これらは Fluent API よりもシンプルですが、柔軟性には劣ります。
例:
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
}
注釈は、キー、文字列の長さ、必須フィールド、および関係を定義します。高度なケースでは、開発者は通常データ アノテーションを組み合わせます。 と流暢な API .
19) EF Core の追跡されるエンティティと追跡されないエンティティの違いは何ですか?
DbContext によって監視されています 変更の場合。更新のデフォルトの動作。追跡されていないエンティティ 監視されていません。 .AsNoTracking() で取得 読み取り専用操作に最適です。 追跡されたエンティティはより多くのメモリを消費しますが、EF は変更を自動的に検出できます。
追跡されていないエンティティによりパフォーマンスが向上します 読み取り頻度が高く、更新頻度が低いシナリオ。
20) Entity Framework で生の SQL クエリを実行するにはどうすればよいですか?
Entity Framework を使用すると、カスタム クエリやパフォーマンス クリティカルなクエリに対して生の SQL を実行できます。
var result = context.Products
.FromSqlRaw("SELECT * FROM Products WHERE Price > 100")
.ToList();
クエリ以外のコマンドの場合:
context.Database.ExecuteSqlRaw("DELETE FROM Products WHERE Discontinued = 1"); この機能はSQL インジェクションを避けるために慎重に使用してください。 データベースに依存しない柔軟性を維持します。
21) Entity Framework と Entity Framework Core の違いは何ですか?
Entity Framework (EF) と Entity Framework Core (EF Core) は、アーキテクチャ、機能、クロスプラットフォーム サポートが異なります。
EF Core は最新の積極的に開発されたコアです。
22) Entity Framework ではトランザクションはどのように機能しますか?
Entity Framework のトランザクションによりデータの整合性が保証されます。 複数の操作が同時に成功または失敗する必要がある場合。デフォルトでは、EF は SaveChanges() をラップします。 トランザクション内。手動制御の場合:
using (var transaction = context.Database.BeginTransaction())
{
try
{
context.Customers.Add(new Customer());
context.SaveChanges();
context.Orders.Add(new Order());
context.SaveChanges();
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}
これによりアトミック性が保証されます。コマンドが失敗した場合、すべての変更はロールバックされます。
EF はSystem.Transactions とも統合されています。 分散トランザクションのサポート用。
23) Entity Framework における TPH、TPT、および TPC の継承戦略について説明します。
Entity Framework は、クラス階層をモデル化するための 3 つの主要な継承マッピング戦略をサポートしています。
ほとんどの開発者はTPH を好みます。 正規化やパフォーマンスの必要性が別途必要な場合を除き、その単純さのためです。
24) Entity Framework でのパフォーマンス チューニングはどのように処理しますか?
Entity Framework のパフォーマンスを最適化するには:
<オル>AsNoTracking() を使用します 読み取り専用クエリの場合。.Include() を持つ必要な関連エンティティのみ .Select() を使用する .AddRange() を使用 と SaveChanges() .context.Configuration.AutoDetectChangesEnabled = false; 適切に調整された EF 実装は、開発者の生産性を維持しながら、ADO.NET のパフォーマンスに近づくことができます。
25) Entity Framework Core のシャドウ プロパティとは何ですか?
シャドウ プロパティ EF モデルには存在しますが、エンティティ クラスには存在しません。これは、変更トラッカー内の EF によって維持され、データベースに保存されます。
例:
modelBuilder.Entity<Order>()
.Property<DateTime>("LastUpdated");
これにより、EF はエンティティ クラスを変更せずに追加のメタデータ (タイムスタンプ、監査情報など) を保存できるようになります。
次の方法でシャドウ プロパティにアクセスできます。
var value = context.Entry(order).Property("LastUpdated").CurrentValue; シャドウ プロパティは、ロギングまたは監査シナリオに最適です。
26) EF Core の値コンバーターとは何ですか?
EF Core の値コンバーターを使用すると、データベースの読み取りまたは書き込み時にプロパティ値を変換できます。
たとえば、列挙型を文字列として保存するには:
modelBuilder.Entity<Employee>() .Property(e => e.Status) .HasConversion( v => v.ToString(), v => (EmployeeStatus)Enum.Parse(typeof(EmployeeStatus), v));
これにより、enum などのカスタム データ型の柔軟性が向上します。 、bool 、または DateTimeOffset .
値コンバータは暗号化、圧縮、 マスキングにも使用されます。
27) グローバル クエリ フィルタとは何ですか?また、その仕組みは何ですか?
グローバル クエリ フィルタを使用すると、エンティティのすべてのクエリに条件を自動的に適用できます。
これは論理的な削除に特に役立ちます。 またはマルチテナント .
例:
modelBuilder.Entity<Employee>() .HasQueryFilter(e => !e.IsDeleted);
Employee に対して実行されるすべてのクエリ 明示的に上書きしない限り、論理的に削除されたレコードは自動的に除外されます。
グローバル フィルタにより、保守性とデータ セキュリティが向上します。
28) 単体テストを使用して Entity Framework コードをテストするにはどうすればよいですか?
実際のデータベースにアクセスせずに EF ロジックを単体テストするには、メモリ内データベースを使用します。 または嘲笑します。 :
- オプション 1:InMemory プロバイダー
var options = new DbContextOptionsBuilder<AppDbContext>() .UseInMemoryDatabase("TestDb") .Options; - オプション 2:DbContext をモックする
DbSetをモックします。 Moq などのライブラリを使用する 隔離されたテスト用
単体テストでは以下を検証する必要があります。
- クエリの正確性 (LINQ 経由)
SaveChanges()以降のデータの整合性- リポジトリ ロジック
EF Core InMemory を使用してテストすると、速度が確保され、SQL Server への依存が回避されます。
29) EF のリポジトリと作業単位のパターンについて説明します。
これら 2 つのアーキテクチャ パターンは抽象的なデータ アクセスに役立ちます。 そしてトランザクションの一貫性を維持します。 .
IRepository<T> Add() とのインターフェース 、GetAll() 、 などの作業単位 トランザクション内の複数のリポジトリを調整します。SaveChanges() コミット境界として機能します。 例:
public class UnitOfWork : IUnitOfWork
{
private readonly AppDbContext _context;
public void Commit() => _context.SaveChanges();
}
これらのパターンによりテスト容易性が向上します。 、コードの再利用 、 そして懸念事項の分離です。 大規模なエンタープライズ アプリケーションで使用されます。
30) 積極的な読み込みと投影読み込みの違いは何ですか?
.Include() .Select() 例context.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name }) パフォーマンス完全なオブジェクトを取得する最小限のデータを取得するユースケース処理に関連エンティティが必要な場合特定の軽量データが必要な場合 プロジェクションローディングはパフォーマンスの最適化です。 必要な列のみを選択することでメモリのオーバーヘッドを削減します。
31) Entity Framework Core のインターセプターとは何ですか?
EF Core のインターセプターを使用すると、 開発者はクエリの実行、コマンドの作成、 接続の開始などのデータベース操作をインターセプトして変更できます。 .
これらは、EF とデータベース プロバイダーの間のミドルウェア コンポーネントとして機能します。
例: 実行されたすべての SQL コマンドをログに記録します。
public class CommandInterceptor : DbCommandInterceptor
{
public override void ReaderExecuting(
DbCommand command,
CommandEventData eventData,
InterceptionResult<DbDataReader> result)
{
Console.WriteLine($"Executing SQL: {command.CommandText}");
base.ReaderExecuting(command, eventData, result);
}
}
DbContextOptionsBuilder に登録します。 :
optionsBuilder.AddInterceptors(new CommandInterceptor());
メリット:
- 強化されたロギング
- セキュリティ (クエリ検証)
- 監査とパフォーマンスの追跡
32) EF Core は非同期操作をどのように処理しますか?
Entity Framework Core は非同期プログラミングを完全にサポートしています。 SaveChangesAsync() などのメソッド経由 、ToListAsync() 、FirstOrDefaultAsync() .
非同期実行はスケーラビリティの向上に役立ちます。 Web アプリケーションでは、I/O バウンドのデータベース操作を待機している間にスレッドを解放します。
例:
var customers = await context.Customers .Where(c => c.IsActive) .ToListAsync();
非同期操作は、高スループットのASP.NET Core APIで特に効果的です。 とマイクロサービスにより、ブロックコールが減少し、応答時間が改善されます。
33) Entity Framework Core の接続回復力とは何ですか?
接続の回復力により、 アプリケーションは一時的なデータベース障害から自動的に回復できます。 ネットワークの中断や SQL タイムアウトなど。
次のように構成できます:
optionsBuilder.UseSqlServer( connectionString, options => options.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null) );
ここで、EF は失敗した操作を遅延を伴いながら最大 5 回再試行します。
これはクラウドホスト環境で特に便利です。 Azure SQL のように、一時的な障害がよく発生します。
34) EF Core の所有エンティティ タイプとは何ですか?
所有エンティティにより値オブジェクトのモデリングが可能になります。 他のエンティティのライフサイクルに完全に依存します。
これらは所有者と同じテーブルを共有しており、独立して存在することはできません。
例:
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Customer
{
public int Id { get; set; }
public Address Address { get; set; }
}
構成:
modelBuilder.Entity<Customer>().OwnsOne(c => c.Address);
使用例:
住所などのモデリング概念 、お金 、 または測定 独自のアイデンティティを持たない。
35) Entity Framework Core で論理的な削除を実装するにはどうすればよいですか?
論理的な削除では、レコードを物理的に削除するのではなく、削除済みとしてマークします。
これらはブール値フラグを使用して実装されます。 およびグローバル クエリ フィルター .
modelBuilder.Entity<Employee>() .HasQueryFilter(e => !e.IsDeleted);
削除操作中:
employee.IsDeleted = true; context.Update(employee); context.SaveChanges();
利点:
- 履歴データの保存
- リカバリが簡単
欠点:
- 大規模なデータベース テーブル
- 慎重なフィルタリング ロジックが必要
36) EF Core のコンパイルされたモデルとは何ですか?また、それが使用される理由は何ですか?
EF Core 6 以降ではコンパイルされたモデル EF モデルのメタデータを .NET アセンブリに事前コンパイルできるため、起動時間と実行時のオーバーヘッドが削減されます。
手順:
<オル>dotnet ef dbcontext optimize メリット: 特に多くのエンティティを含む大規模なアプリケーションで、初期化のレイテンシが 30 ~ 40% 削減されます。
使用例: 高性能のマイクロサービスとサーバーレス環境。
37) Entity Framework でキャッシュを実装するにはどうすればよいですか?
キャッシュは、反復的なデータベース クエリを減らすのに役立ちます。主に 2 つのレベルがあります:
DbContext ごと インスタンス自動的に管理される二次キャッシュ コンテキスト間で共有される外部キャッシュEFCoreSecondLevelCacheInterceptor のようなライブラリを使用する 第 2 レベルのキャッシュの例:
services.AddEFSecondLevelCache(options =>
{
options.UseMemoryCacheProvider().DisableLogging(false);
});
これにより読み取り負荷の高いアプリケーションのパフォーマンスが大幅に向上します。 重複したデータベース ヒットを回避することで。
38) EF Core は同時実行トークンとタイムスタンプをどのように管理しますか?
同時実行トークンは競合する更新を防ぎます。 マルチユーザー環境では。
[ConcurrencyCheck] を使用して、プロパティを同時実行トークンとしてマークできます。 または [Timestamp] 属性。
例:
public class Product
{
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
更新が発生すると、EF はこの列を WHERE に含めます。 条項。
値が一致しない場合、DbUpdateConcurrencyException がスローされます — 楽観的な同時実行制御を確保します .
39) EF Core で監査 (作成、変更、削除の追跡) を実装するにはどうすればよいですか?
監査では作成者、変更者、 削除者などのメタデータを追跡します。 記録。
SaveChanges() をオーバーライドできます。 :
public override int SaveChanges()
{
var entries = ChangeTracker.Entries()
.Where(e => e.Entity is IAuditable &&
(e.State == EntityState.Added || e.State == EntityState.Modified));
foreach (var entry in entries)
{
var auditable = (IAuditable)entry.Entity;
auditable.LastModified = DateTime.UtcNow;
}
return base.SaveChanges();
}
インターフェース:
public interface IAuditable
{
DateTime Created { get; set; }
DateTime LastModified { get; set; }
}
この方法では監査ロジックを一元化し、一貫したデータ ガバナンスを確保します。 .
40) エンタープライズ アプリケーションで Entity Framework を使用するためのベスト プラクティスは何ですか?
AsNoTracking() を使用してください 読み取り専用クエリのプロジェクション。オーバーヘッドを削減します。設計 リポジトリと作業単位のパターンを実装します。保守性が向上します。セキュリティ パラメータ化されたクエリを使用して SQL インジェクションを回避します。データ保護。スケーラビリティ 接続プーリングと非同期メソッドを使用します。高負荷を処理します。移行 バージョン管理による自動移行を使用します。スキーマ管理を簡素化します。設定 接続文字列とシークレットを外部化します。環境の分離を強化します。テスト 単体テストには InMemory プロバイダを使用します。テスト実行の高速化。ロギング パフォーマンスに関する洞察を得るために EF ログを有効にします。デバッグが容易になります。 これらのプラクティスにより、堅牢性、拡張性、保守性が保証されます。 Entity Framework 上に構築されたアプリケーション。
41) Entity Framework での SQL 変換を向上させるために、LINQ クエリを最適化するにはどうすればよいですか?
Entity Framework は LINQ クエリを SQL に自動的に変換しますが、非効率なパターンでは低速または冗長な SQL が生成される可能性があります。 LINQ を最適化すると、ORM がパフォーマンスの高いデータベース クエリを生成できるようになります。
最適化テクニック:
投影を使用する:
<オル>
var customers = context.Customers
.Select(c => new { c.Id, c.Name })
.ToList();
クライアント側の評価を避ける: フィルタリングがSQL 内で行われることを常に確認してください。 、記憶にない。評価がクライアント側である場合、EF Core は警告を出します。
AsNoTracking() を使用してください。 読み取り専用データの場合。var orders = context.Orders.AsNoTracking().ToList();コンパイルされたクエリを活用する LINQ 操作を繰り返す場合は、不必要な
.Include() を避けてください。 電話 — 必要な場合にのみ関連データを含めます。 例:
非効率:
context.Customers.ToList().Where(c => c.IsActive);
効率的:
context.Customers.Where(c => c.IsActive).ToList();
42) EF Core に初期データをシードするさまざまな方法には何がありますか?
データ シーディングにより、データベースにデフォルト データまたは参照データが確実に含まれます。
アプローチ 1:ModelBuilder を使用する
modelBuilder.Entity<Role>().HasData(
new Role { Id = 1, Name = "Admin" },
new Role { Id = 2, Name = "User" }
);
これにより、Update-Database 中にデータが自動的に挿入されます。 .
アプローチ 2:カスタム シード方法
起動時にコードを手動で実行します:
context.Database.Migrate();
if (!context.Users.Any())
{
context.Users.Add(new User { Name = "Admin" });
context.SaveChanges();
}
アプローチ 3:SQL スクリプト
移行で生の SQL を使用する:
migrationBuilder.Sql("INSERT INTO Roles (Name) VALUES ('Admin')");
推奨事項:
HasData() を使用してください 静的な参照データの場合と、動的な起動データのプログラムによるシード処理です。
43) EF Core はデータベース プロバイダーを内部的にどのように管理しますか?
EF Core はプロバイダーに依存しないです。 つまり、 個別のデータベース プロバイダー パッケージを介して複数のデータベース エンジンをターゲットにすることができます。 .
一般的なプロバイダー:
Microsoft.EntityFrameworkCore.SqlServer MSSQLSQLiteMicrosoft.EntityFrameworkCore.Sqlite モバイル/デスクトップPostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL PostgreSQLMySQLPomelo.EntityFrameworkCore.MySql MySQLCosmos DBMicrosoft.EntityFrameworkCore.Cosmos NoSQL 内部的には、EF Core は抽象化レイヤーを使用します。 の場合:
- クエリの翻訳
- SQL コマンドの生成
- データ型マッピング
各プロバイダーは、EF Core の基本抽象化 (例:RelationalDatabaseProvider) を継承する独自のクラスを実装します。 、QuerySqlGenerator ).
44) 「分割クエリ」とは何ですか?いつ使用する必要がありますか?
分割クエリにより、EF が大規模で複雑な結合を実行できなくなります。 1 つではなく複数の SQL クエリを実行します。
例:
var customers = context.Customers .Include(c => c.Orders) .AsSplitQuery() .ToList();
これは以下を実行します:
<オル>メリット:
- 大きなデカルト積を防止します。
- 大規模な関連データセットのパフォーマンスが向上します。
欠点:
データベースへの複数の往復。
分割クエリを使用する メモリの問題を引き起こす可能性のある大きな関連データを積極的にロードする場合。
45) EF で生成された SQL コマンドを効果的に監視するにはどうすればよいですか?
SQL を監視すると、遅いクエリをデバッグし、ORM の動作を最適化するのに役立ちます。
SQL をログに記録する方法:
<オル>optionsBuilder .UseSqlServer(conn) .LogTo(Console.WriteLine, LogLevel.Information);ILoggerFactory の統合
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); optionsBuilder.UseLoggerFactory(loggerFactory);インターセプター
DbCommandInterceptor を実装する コマンドとタイミングをキャプチャするためのプロファイリング ツール 次のようなツールを使用します。- ミニプロファイラー
- SQL Server プロファイラー
- EFCorePowerTools
ログ記録は選択的に有効にする必要があります。 本番環境では、パフォーマンスのオーバーヘッドを回避するために使用されます。
46) ChangeTracker.DetectChanges() と AutoDetectChangesEnabled の違いは何ですか?
DetectChanges() AutoDetectChangesEnabled 例:
context.ChangeTracker.AutoDetectChangesEnabled = false;
foreach (var item in list)
{
context.Add(item);
}
context.SaveChanges();
ループ内の自動検出を無効にすると、パフォーマンスが最大 40% 向上します。 一括操作で。
47) EF Core でテンポラル テーブルをどのように使用しますか?
テンポラル テーブル (SQL Server 2016 で導入) を使用すると履歴データを追跡できます。 自動的に。
手順:
<オル>
builder.Entity<Employee>()
.ToTable("Employees", b => b.IsTemporal());
履歴データのクエリ:var history = context.Employees .TemporalAsOf(DateTime.UtcNow.AddDays(-7)) .ToList();
利点:
- 組み込みのデータ履歴追跡
- 監査とコンプライアンス
- 手動トリガーは必要ありません
EF Core 6+ は、完全な一時クエリをサポートします。
48) EF Core は、コンパイルされたクエリと事前生成されたモデルをどのように組み合わせてサポートしますか?
コンパイルされたクエリとコンパイルされたモデルは 2 つのパフォーマンス機能です。 互いに補完し合うものです。
コンパイルされたクエリの例:
static readonly Func<AppDbContext, int, Customer> _getCustomerById = EF.CompileQuery((AppDbContext ctx, int id) => ctx.Customers.FirstOrDefault(c => c.Id == id));
使用法:
var customer = _getCustomerById(context, 5);
一緒に: コンパイルされたモデルにより初期コストが削減されます。 一方で、 コンパイルされたクエリは実行時のクエリのオーバーヘッドを削減します。 —高頻度のクエリに最適です。 .
49) マイクロサービス アーキテクチャで EF を使用するときによくある落とし穴は何ですか?
よくある間違い:
<オル>→ マイクロサービス分離に違反します。
→ 各マイクロサービスには独自の DbContext とスキーマが必要です。
→ API 呼び出しごとの EF クエリを最小限に抑える。
→ DTO 経由で必要なものだけをロードします。
→ Each service should manage its own migrations independently.
→ Use distributed transactions (Outbox pattern) if cross-service consistency is required.
→ Use repository abstraction to keep flexibility in database choice.
50) How does dependency injection integrate with DbContext in ASP.NET Core?
Entity Framework integrates seamlessly with ASP.NET Core’s built-in Dependency Injection (DI) system.
Setup:
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Default")));
Then inject it into controllers or services:
public class CustomerService
{
private readonly AppDbContext _context;
public CustomerService(AppDbContext context)
{
_context = context;
}
}
Lifetimes:
Using DI ensures testability, lifecycle management , and resource efficiency across web and background processes.
🔍 Top Entity Framework Interview Questions with Real-World Scenarios &Strategic Responses
1) What is Entity Framework, and why is it used in enterprise applications?
Expected from candidate: The interviewer wants to assess your foundational understanding of Entity Framework and its value in real-world applications.
Example answer: Entity Framework is an Object-Relational Mapping framework for .NET that allows developers to work with databases using .NET objects instead of raw SQL. It is used in enterprise applications to improve productivity, reduce boilerplate data access code, and maintain a strong separation of concerns.
2) Can you explain the difference between Code First, Database First, and Model First approaches?
Expected from candidate: The interviewer wants to evaluate your knowledge of different development workflows and when to use each one.
Example answer: Code First starts with domain classes and generates the database from code. Database First begins with an existing database and generates entity classes. Model First uses a visual designer to define the model and then creates both code and database. Each approach is chosen based on project requirements and existing infrastructure.
3) How does Entity Framework handle relationships between tables?
Expected from candidate: The interviewer is checking your understanding of data modeling and relational mapping.
Example answer: Entity Framework handles relationships using navigation properties and foreign keys. It supports one-to-one, one-to-many, and many-to-many relationships, allowing developers to traverse related data using object references rather than joins.
4) Describe a situation where you improved database performance using Entity Framework.
Expected from candidate: The interviewer wants to hear a practical example demonstrating optimization skills.
Example answer: In my previous role, I improved performance by reducing unnecessary eager loading and implementing projection queries with Select statements. This minimized the amount of data retrieved from the database and significantly reduced query execution time.
5) How do you manage migrations in Entity Framework?
Expected from candidate: The interviewer is assessing your experience with schema changes and version control.
Example answer: Migrations are managed using the built-in migration tools that track model changes over time. At a previous position, I regularly generated and reviewed migration scripts before applying them to ensure database integrity across environments.
6) What is lazy loading, and when would you avoid using it?
Expected from candidate: The interviewer wants to test your understanding of data loading strategies and performance trade-offs.
Example answer: Lazy loading automatically loads related data when it is accessed. I would avoid using it in performance-critical scenarios or APIs because it can cause multiple unintended database calls, leading to the N+1 query problem.
7) How do you handle transactions in Entity Framework?
Expected from candidate: The interviewer is evaluating your knowledge of data consistency and error handling.
Example answer: Entity Framework supports transactions through the DbContext and TransactionScope. At my previous job, I used explicit transactions to ensure that multiple related database operations either completed successfully together or were rolled back in case of failure.
8) Explain how dependency injection is used with Entity Framework.
Expected from candidate: The interviewer wants to see how well you understand modern application architecture.
Example answer: Dependency injection is used to inject the DbContext into services or controllers. This improves testability and maintainability by allowing the context to be mocked or replaced without changing business logic.
9) Describe a challenging bug you encountered with Entity Framework and how you resolved it.
Expected from candidate: The interviewer is looking for problem-solving ability and debugging skills.
Example answer: In my last role, I encountered an issue with tracking conflicts when updating detached entities. I resolved it by explicitly setting entity states and ensuring that only one instance of each entity was tracked by the context.
10) How do you decide when Entity Framework is not the right tool?
Expected from candidate: The interviewer wants to understand your judgment and ability to choose appropriate technologies.
Example answer: I consider alternatives when applications require extremely high-performance data access or complex stored procedure logic. In such cases, using a micro-ORM or raw ADO.NET can provide more control and efficiency.
C言語