
Entity Framework Core 応用
Raw SQL、stored procedures、トランザクション、AsNoTracking、AsSplitQuery、query tags、interceptors、パフォーマンスチューニング
1EF Core でエンティティを取得するために raw SQL クエリを実行するにはどうすればよいですか?
EF Core でエンティティを取得するために raw SQL クエリを実行するにはどうすればよいですか?
回答
FromSql() または FromSqlRaw() メソッドを使うと、DbContext によって追跡されるエンティティを返しながら raw SQL クエリを実行できます。これは stored procedures やテーブル値関数の呼び出しなど、LINQ ではクエリを直接表現できないシナリオで役立ちます。その後、結果を LINQ と組み合わせてフィルターを追加したり、リレーションを含めたりできます。
2EF Core における FromSqlRaw() と ExecuteSqlRaw() の違いは何ですか?
EF Core における FromSqlRaw() と ExecuteSqlRaw() の違いは何ですか?
回答
FromSqlRaw() は追跡対象のエンティティを返す SELECT クエリの実行に使用され、LINQ との組み合わせが可能です。ExecuteSqlRaw() は非クエリコマンド(INSERT、UPDATE、DELETE)の実行に使用され、影響を受けた行数を返します。FromSqlRaw() は DbSet に適用され、ExecuteSqlRaw() は Database に適用されます。この区別により、型安全性とモデルの整合性が保証されます。
3EF Core でエンティティを返す stored procedure を呼び出すにはどうすればよいですか?
EF Core でエンティティを返す stored procedure を呼び出すにはどうすればよいですか?
回答
stored procedure を呼び出して結果をエンティティにマッピングするには、FromSqlRaw() または Database.SqlQuery<T>() を使用します。呼び出しの後に AsEnumerable() を追加することが重要で、これにより EF Core が stored procedure の結果に対して構成を試みて SQL 構文エラーを引き起こすのを防ぎます。パラメーターは SQL インジェクションを防ぐために @p0、@p1 構文を使って渡せます。
EF Core における AsNoTracking() の役割は何ですか?
AsNoTracking() の代わりに AsNoTrackingWithIdentityResolution() を使うのはどのような場合ですか?
+22 面接問題