EF不执行删除命令

本文关键字:命令 删除 执行 EF | 更新日期: 2023-09-27 17:57:52

我使用实体框架作为我的数据访问层。但对于某些任务(例如批量删除),我希望使用原始SQL命令。

但在这一点上,EF让我感到惊讶,因为它似乎执行DML,但什么都没做。

如果我直接运行sql,它会按预期执行并删除数据。那么我做错了什么呢?

    using (var db = new MyDbContext())
    {
        var sqlTime = string.Concat("DELETE FROM SYNCING_CONTENT WHERE ID in (SELECT SyncContent_Id FROM SYNCING WHERE EXPIRATION < GETDATE());");
        var deleted = db.Database.ExecuteSqlCommand(sqlTime);
        return deleted;
    }

编辑:

    using (var db = new MyDbContext())
    {
        const string SQL_TIME = "DELETE FROM SYNCING_CONTENT WHERE ID in (SELECT SyncContent_Id FROM SYNCING WHERE EXPIRATION < GETDATE())";
        var deleted = db.Database.ExecuteSqlCommand(SQL_TIME);
        return deleted;
    }

EF不执行删除命令

尝试删除;从您的SQL字符串。

此外,这个问题可能是由于在您的sql字符串中传递了GETDATE(),如果您将其作为sql参数传递,我知道这是一个问题。

尝试

const string SQL_TIME = @"DELETE FROM SYNCING_CONTENT WHERE ID in (SELECT SyncContent_Id FROM SYNCING WHERE EXPIRATION < {0})";
db.Database.ExecuteSqlCommand(SQL_TIME, DateTime.Now);