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
是一个有效日期我是做错了什么,还是这是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问题是我在插入的参数周围使用了单引号。