繁体   English   中英

在实体框架中删除多行

[英]Delete multiple rows in Entity Framework

我正在尝试删除EF5中的多行,并且正在使用以下代码示例

string TestId = "12,23";
Context.Database.ExecuteSqlCommand("DELETE FROM TEST WHERE TESTID IN (@Params)", new SqlParameter("Params", TestId));

如何为IN传递SqlParameter 我正在尝试传递一串用逗号分隔的值

谢谢

您可以在SQL查询TESTID IN (...)部分中传递动态数量的值的唯一方法是使用子选择。 这适用于SQL查询本身,因此没有参数类型可以解决您的问题。

您的替代方法是使用字符串连接并仔细验证每个参数来动态构建查询。

由于您使用的是ID,因此它们可能是整数。

List<int> testId = ...;
var sb = new StringBuilder();
sb.Append("DELETE FROM TEST WHERE TESTID IN (");
bool first = true;
foreach (var i in testId)
{
    if (first)
        first = false;
    else
        sb.Append(",");
    sb.Append(i.ToString(CultureInfo.InvariantCulture));
}
sb.Append(")");
Context.Database.ExecuteSqlCommand(sb.ToString());

由于没有附加到查询中的字符串参数,因此可以避免任何SQL注入-整数将无法包含恶意SQL代码。

当ID的数量很大(以至于查询在编译过程中由于时间太长而失败)时,通常的方法是创建一个临时表并在其中插入ID。

另一种选择是传递格式为XML的值,然后在SQL查询中编写一个子选择,该子选择将从XML字符串中检索它们。

暂无
暂无

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

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