ASP.NET Core和EF Core 1.1 - 使用存儲過程的Diplay數據

asp.net-core entity-framework-core

我的查詢有問題。我想在視圖上顯示結果。

[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列名稱上的實體相同

這可以在EF Core 1.1上實現嗎?或者我是否需要返回手動ADO.NET代碼?

謝謝!

一般承認的答案

雖然對Entity Framework Core 還沒有完全支持存儲過程, 您仍然可以使用FromSql來使用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在這裡使用AsNoTracking來避免數據上下文跟踪來自存儲過程的實體的更改(因為您無論如何都無法更新它們)。此外,我在方法中使用Set<T>()以避免必須在數據庫上下文中將類型公開為成員,因為無論如何都不能使用沒有存儲過程的集合。

順便說一句。你傳遞給FromSql的sql語句中不需要(不確定是否FromSqlEXEC 。只需傳遞存儲過程名稱及其任何參數,例如:

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命令,即存儲過程。

https://forums.asp.net/post/6061777.aspx



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow