EntityFrameworkCore FromSql方法調用拋出System.NotSupportedException

asp.net-mvc entity-framework entity-framework-core

所以我正在使用AspNetCore 1.0和EFCore 1.0,據我所知,這兩個版本都是最新版本。

在DbSet上使用FromSql方法執行查詢以刪除對象會引發異常。代碼和例外都在下面。

public void DeleteColumn(int p_ColumnID)
{
    int temp = p_ColumnID;
    string query = "DELETE FROM Columns WHERE ID = {0}";
    var columnsList = m_context.Columns.FromSql(query, p_ColumnID).ToList();
    foreach (Columns c in columnsList)
    {
        m_context.Columns.Remove(c);
    }
     m_context.SaveChanges();
}

執行FromSql調用後,我得到以下異常

An exception of type 'System.NotSupportedException' occurred in Remotion.Linq.dll but was not handled in user code

Additional information: Could not parse expression 'value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[ASPNET5_Scrum_Tool.Models.Columns]).FromSql("DELETE FROM Columns WHERE ID = {0}", __p_0)': This overload of the method 'Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSql' is currently not supported.

我不知道如何解決這個錯誤,從谷歌搜索我沒有遇到類似的問題。

我也想知道,如果查詢/代碼成功,它將返回一個'IQueryable對象。那隻會包含查詢的結果,在這種情況下要刪除特定的Column對象嗎?

一般承認的答案

FromSql旨在允許您FromSql將返回實體的自定義SQL SELECT語句。在此處使用它與DELETE語句不合適,因為您的目標是加載要刪除的記錄,然後使用默認的實體框架機制刪除它們。 Delete語句通常不會返回已刪除的記錄(儘管有方法可以實現)。即使他們這樣做了,記錄也會被刪除,所以你不想迭代它們並對它們進行Remove

執行所需操作的最直接方法可能是將RemoveRange方法與Where查詢結合使用。

public void DeleteColumn(int p_ColumnID)
{
   m_context.Columns.RemoveRange(m_context.Columns.Where(x => x.ID == p_ColumnID))     
   m_context.SaveChanges();
}

或者,如果要加載實體並手動迭代它們

public void DeleteColumn(int p_ColumnID)
{
    columnList = m_context.Columns.Where(x => x.ID == p_ColumnID);
    foreach (Columns c in columnsList)
    {
        m_context.Columns.Remove(c);
    }
     m_context.SaveChanges();
}

如果你真的想按照Mike Brind的建議手動發出Delete語句,請使用類似於的ExecuteSqlCommand方法:

public void DeleteColumn(int p_ColumnID)
{
    string sqlStatement = "DELETE FROM Columns WHERE ID = {0}";
    m_context.Database.ExecuteSqlCommand(sqlStatement, p_ColumnID);
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因