Entity Framework 6 Code Firstの弱点の1つは、データベースコンストラクト(ビュー、ストアドプロシージャなど)をネイティブに呼び出すサポートの欠如です。Entity Framework(EF)のCode-Firstを聞いたことがない、または使用したことがない人のために、Code-Firstは単にFluentマッピングAPIです。その考え方は、すべてのデータベースマッピングをコード(つまりC#)で作成し、フレームワークがデータベーススキーマの変更を作成して追跡することです。
従来のEntity Frameworkでストアドプロシージャを呼び出すには、EDMXファイルでマップします。これは複数ステップのプロセスです。プロセスが完了すると、DataContextから派生するメソッドが作成されます。
ストアドプロシージャの呼び出しをより簡単にすることを目指しました。ストアドプロシージャの中核には、プロシージャ名、N個のパラメータ、および結果セットがあります。プロシージャ名、パラメータ、および戻り値の型を取得する小さな拡張メソッドを作成しました。それは機能します。プロシージャとそのパラメータをマップする必要はありません。
public static List<TReturn> CallStoredProcedure<TParameters, TReturn>(this DataContext context, string storedProcedure, TParameters parameters) where TParameters : class where TReturn : class, new()
{
IDictionary<string,object> procedureParameters = new Dictionary<string, object>();
PropertyInfo[] properties = parameters.GetType().GetProperties();
var ps = new List<object>();
foreach (var property in properties)
{
object value = property.GetValue(parameters);
string name = property.Name;
procedureParameters.Add(name, value);
ps.Add(new SqlParameter(name, value));
}
var keys = procedureParameters.Select(p => string.Format("@{0}", p.Key)).ToList();
var parms = string.Join(", ", keys.ToArray());
return context.Database.SqlQuery<TReturn>(storedProcedure + " " + parms, ps.ToArray()).ToList();
}
使用方法
var context = new DataContext();
List<User> users = context.CallStoredProcedure<object,User>("User_GetUserById", new{userId = 3});
Author: Chuck Conway is an AI Engineer with nearly 30 years of software engineering experience. He builds practical AI systems—content pipelines, infrastructure agents, and tools that solve real problems—and shares what he’s learning along the way. Connect with him on social media: X (@chuckconway) or visit him on YouTube and on SubStack.
著者: Chuck Conwayは、ソフトウェアエンジニアリングの経験が30年近くあるAIエンジニアです。彼は実用的なAIシステム(コンテンツパイプライン、インフラストラクチャエージェント、実際の問題を解決するツール)を構築し、学んだことを共有しています。ソーシャルメディアで彼とつながってください: X (@chuckconway) または YouTube と SubStack で彼を訪問してください。