Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有插值字符串的ExecuteSqlCommand将导致';无效的输入语法';错误_C#_Entity Framework Core_Ef Core 2.1 - Fatal编程技术网

C# 带有插值字符串的ExecuteSqlCommand将导致';无效的输入语法';错误

C# 带有插值字符串的ExecuteSqlCommand将导致';无效的输入语法';错误,c#,entity-framework-core,ef-core-2.1,C#,Entity Framework Core,Ef Core 2.1,根据这一点,我应该能够将插值字符串传递给ExecuteSqlCommandAsync,如下所示: public async Task DeleteEntries(DateTimeOffset loggedOn) { await myContext.Database.ExecuteSqlCommandAsync( $"DELETE from log_entry WHERE logged_on < '{loggedOn}';" ); } 公共异步任务Delet

根据这一点,我应该能够将插值字符串传递给
ExecuteSqlCommandAsync
,如下所示:

public async Task DeleteEntries(DateTimeOffset loggedOn) {
    await myContext.Database.ExecuteSqlCommandAsync(
        $"DELETE from log_entry WHERE logged_on < '{loggedOn}';"
    );
}
公共异步任务DeleteEntries(DateTimeOffset loggedOn){
等待myContext.Database.ExecuteSqlCommandAsync(
$“从登录的日志项中删除<'{loggedOn}'
);
}
但是,它给了我以下错误:
Npgsql.postgresception:'22007:时区为“@p0”的时间戳类型的输入语法无效。

  • loggedOn
    是一个有效日期
  • 将插值字符串提取到临时变量可以修复它,但是我会丢失SQL注入攻击的输入验证

  • 我是做错了什么,还是这是EFCore中的一个bug?使用您所参考的网页上最新的EFCore 2.1,警告您不要将直接值插入SQL,即使用如下参数:

    FromSql("EXECUTE dbo.GetMostPopularBlogsForUser @user", user)
    
    因此,根据您的需要进行调整,并进行如下操作:

    FromSql("DELETE from log_entry WHERE logged_on < @logged_on", loggedOn.ToString("0"))
    
    FromSql(“从登录的日志项中删除”<@loggedOn.ToString(“0”))
    

    注意:不要对表名使用双引号
    ”——要么不使用引号,要么将其用
    []
    包装为
    [log\u entry]

    正如@IvanStoev提供的,答案是删除插值参数周围的单引号。

    登录的
    的列类型是什么?
    ?如果使用EF上下文,为什么不使用上下文而不是执行sql命令来删除项?不要在表和列标识符周围使用引号。@IvanStoev th答案是:谢谢you@Matt因为我必须将实体加载到内存中的效率远远低于直接删除。此表包含每天需要删除的数百万条记录。上下文外删除在EFCore团队的待办事项中。文档明确说明is支持插值字符串和f问题是我在插入的参数周围使用了单引号。