私は私の質問に問題があります。結果をビューに表示したい。
[HttpGet]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Index()
{
return View(await _Context.Employee
.FromSql("EXEC sp_GetLoanDetails")
.ToArrayAsync());
}
ここに私が見たい項目のリストがあります:
public class StoredProcRow
{
[Key]
public int empID { get; set; }
public string empFullName { get; set; }
public double EducationalLoan { get; set; }
public double PettyCash { get; set; }
public double BusinessLoan { get; set; }
public double ApplianceLoan { get; set; }
public double EmergencyLoan { get; set; }
public double AllPurposeLoan { get; set; }
public double KAPUSOIILoan { get; set; }
public double FiestaLoan { get; set; }
public double SalaryLoan { get; set; }
public double Pledge { get; set; }
public double PagIbigLoan { get; set; }
public double SSSLoan { get; set; }
public double AllAroundLoan { get; set; }
public double Total { get; set; }
}
注:これらのエンティティ名は、 sp_GetLoanDetails
列名のエンティティと同じsp_GetLoanDetails
これはEF Core 1.1上で現在達成可能ですか?または、手動のADO.NETコードに戻る必要がありますか?
ありがとう!
ストアドプロシージャのサポートはEntity Frameworkコアでは完全にはサポートされていませんが 、依然としてFromSql
を使用してストアドプロシージャを使用することができます。
そのためには、データベースコンテキストでは、ストアドプロシージャからマッピングするエンティティを知る必要があります。残念ながら、これを行う唯一の方法は、実際にはデータベースコンテキスト内のエンティティとして定義することです。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<StoredProcRow>(entity =>
{
// …
});
}
次に、そのエンティティのセットに対してFromSql
メソッドを実行して、ストアドプロシージャを使用できます。
public virtual IQueryable<StoredProcRow> GetLoanDetails()
{
return Set<StoredProcRow>().FromSql("[sp_GetLoanDetails]").AsNoTracking();
}
ここで、 AsNoTracking
を使用すると、ストアドプロシージャから来たエンティティへの変更をデータコンテキストが追跡するのを避けることができます(とにかく更新する方法がないため)。とにかくストアドプロシージャなしでセットを使用することができないので、メソッド内でSet<T>()
を使用して、データベースコンテキスト上のメンバとして型を公開しないようにします。
Btw。 FromSql
渡すSQL文のEXEC
は必要ありません。ストアドプロシージャ名とその引数を渡すだけです。例:
Set<MyEntity>().FromSql("[SomeStoredProcedure]");
Set<MyEntity>().FromSql("[SProcWithOneArgument] @Arg = {0}");
Set<MyEntity>().FromSql("[SProcWithTwoArguments] @Arg1 = {0}, Arg2 = {1}");
NuGetからSystem.Data.CommonとSystem.Data.SqlClientを追加します。これにより、ADO.NETコマンド、つまりストアドプロシージャを実行できます。