繁体   English   中英

如何使用动态数量的参数在EF Core中构造原始SQL查询

[英]How to construct a raw SQL Query in EF Core with dynamic number of parameters

我试图动态构造将具有X个条件的原始SQL查询。 我正在使用此页面上的信息进行操作: https : //docs.microsoft.com/zh-cn/ef/core/querying/raw-sql

目前我有类似的东西:

String rawQuery = "SELECT * FROM ItemsTable WHERE ";

foreach (f in FilterList) {
  rawQuery = rawQuery + String.Format(f.condition, f.userInput);
  // f.condition is something like "Name LIKE {0}"
}

var filteredItems = context.ItemsTable
  .FromSql(rawQuery)
  .ToList();

问题是,在使用.FromSql()时不会替换我的参数,因此我容易受到SQL注入攻击。

有没有办法使用.FromSql()完成此任务?

或者,还有另一种方法可以防止SQL注入吗?

您可以使查询参数化,构建SqlParameters列表,然后将查询和参数传递给FromSql()

var rawQuery = new StringBuilder("SELECT * FROM ItemsTable WHERE ");
var sqlParameters = new List<SqlParameter>();

foreach (var f in FilterList) {
  var parameterName = $"@p{FilterList.IndexOf(f)}";
  var parameterizedCondition = string.Format(f.condition, parameterName);
  // f.condition is something like "Name LIKE {0}"

  rawQuery.Append(parameterizedCondition);
  sqlParameters.Add(new SqlParameter(parameterName, f.userInput));
}

var filteredItems = context.ItemsTable
  .FromSql(rawQuery.ToString(), sqlParameters)
  .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM