根据此docs和this,我应该能够像这样将内插的字符串传递给ExecuteSqlCommandAsync
:
public async Task DeleteEntries(DateTimeOffset loggedOn) {
await myContext.Database.ExecuteSqlCommandAsync(
$"DELETE from log_entry WHERE logged_on < '{loggedOn}';"
);
}
但是,它给了我以下错误:Npgsql.PostgresException: '22007: invalid input syntax for type timestamp with time zone: "@p0"'
loggedOn
是有效日期。我是在做错什么还是这是EFCore中的错误?使用最新的EFCore 2.1
答案 0 :(得分:1)
@IvanStoev提供的答案是删除插值参数周围的单引号。
答案 1 :(得分:0)
您所引用的网页警告您不要在SQL中插入直接值,即使用如下参数:
FromSql("EXECUTE dbo.GetMostPopularBlogsForUser @user", user)
因此,请根据您的需要进行调整,并添加以下内容:
FromSql("DELETE from log_entry WHERE logged_on < @logged_on", loggedOn.ToString("0"))
P.S。请勿在表名上使用双引号"
-不使用引号或将[]
换成[log_entry]
。