内部結合と左外部結合を使用して2つ以上のテーブルからデータベースからレコードを選択するEFを使用してストアドプロシージャを実行することは可能ですか?.
私の見解は、EFまたはLINQで結合を行う方法を回避することです。これは多くの問題があります。
したがって、そのプロシージャを作成する場合、ユーザー入力からパラメーターを指定して呼び出し、その結果を.ToList()
メソッドに割り当てて、結果をasp:repeater .DataSource
に追加できます。
奇妙な質問かもしれませんが、私は多くの理由で最初にこれをやりたいと思っています。EFを使用する方が快適だからです。次に、EFで結合を使用しないようにします。 3番目に、クエリを頻繁に呼び出す場合にストアドプロシージャを使用するとクエリのパフォーマンスが向上することをどこかで読みました。
誰かが例を挙げてこれらの質問に答えるのを手伝ってくれるなら、私は感謝します。
Entity FrameworkデータコンテキストからSqlQuery
を呼び出すことができます。
context.Database.SqlQuery<YourType>("exec usp_StoredProcedure").ToList()
例として、クエリ結果をマップするクラスが必要になります。
public class YourType
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
以下に示すように、クエリにパラメータを指定することもできます。
SqlParameter parameter1 = new SqlParameter("@Parameter1", "Value");
context.Database.SqlQuery<YourType>("exec usp_StoredProcedure @Parameter1", parameter1).ToList()
MySQLでEntity Frameworkを使用している場合:
この例では、ストアドプロシージャはmyParamという名前のタイプ[〜#〜] bigint [〜#〜]
var myParam = new SqlParameter("@myParam", (MySqlDbType.Int64)).Value = 100;
var res = _context.Database.SqlQuery<MyEntity>($"call MyProcedureName({pyParam})");
クエリ文字列を作成するために C#文字列補間 を使用していることに注意してください。
Entity Frameworkでストアドプロシージャを実行する方法を確認します。MVCでは、EFを追加する方法を確認します。
データベースで次のスクリプトを実行して、ストアドプロシージャを作成します。
CREATE PROCEDURE FETCHEMPLOYEES AS
BEGIN
SELECT * FROM EMPTABLE
END
CREATE PROCEDURE FETCHEMPLOYEE(@ID INT) AS
BEGIN
SELECT * FROM EMPTABLE WHERE ID = @ID
END
public class EmpModel
{
EmployeeEntities empdb = new EmployeeEntities();
public List<EMPTABLE> GetEmployees()
{
return empdb.FETCHEMPLOYEES().ToList();
}
public EMPTABLE GetEmployee(int? id)
{
return empdb.FETCHEMPLOYEE(id).ToList().Single();
}
}
public class EmployeeController : Controller
{
Models.EmpModel mod = new Models.EmpModel();
public ActionResult Index()
{
List<EMPTABLE> result = mod.GetEmployees();
return View(result);
}
public ActionResult Details(int id)
{
EMPTABLE result = mod.GetEmployee(id);
return View(result);
}
}
詳細な手順については、次のリンクを参照してください。 http://dotnetvisio.blogspot.in/2014/01/execute-stored-procedure-using-entity.html
ExecuteFunction
クラスのObjectContext
を使用できます:
public virtual ObjectResult<CustomClassForStoreReturnedData> NameOfStoredProcedure(Nullable<int> tableID)
{
var IDParameter = tableID.HasValue ?
new ObjectParameter("tableID", tableID) :
new ObjectParameter("tableID", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustomClassForStoreReturnedData>("NameOfStoredProcedureInSQLDatabase", IDParameter);
}