繁体   English   中英

实体框架ExecuteSqlCommand批量更新

[英]Entity Framework ExecuteSqlCommand bulk update

出于性能原因,我试图使用实体框架ExecuteSqlCommand批量更新数据。 ctx.Database.ExecuteSqlCommand(updateQuery, new object[] {newValue} );

但是,我在设置表的值字段时遇到了麻烦。 它应该将现有值乘以一个因子,但是我收到以下错误:

附加信息:将数据类型nvarchar转换为数字时出错。

newValue = "Value * 56,25";    
String updateQuery = @"UPDATE dbo.BudgetLine_type1_unpivoted set Value = {0} where valueTypeID='Value2' AND Dim2 in ('712','718','722') AND Dim4 = '110' AND Period = 1"
int noRowsAffected = db.Database.ExecuteSqlCommand(updateQuery, new object[] {newValue} );

将newValue设置为“ 1”或仅将“ Value”(不进行任何更改)设置时,效果很好

我应该如何进行乘法? 值字段的类型为小数(28,6)

将参数传递给ExecuteSqlCommand行为与string.Format ,因此您的{0}占位符不正确-您需要在此处设置SQL参数。

如果要始终将“ Value乘以一定的数量,则该数量会发生变化,因此这是您需要传递的参数。 您只需要根据查询是否是乘法来调整查询,即set Value = Value * @p0set Value = @p0 我假设您的代码必须知道要设置的值以及是否要乘。

我会这样写,类似于MSDN中的描述示例:

decimal newValue = 56.25;
bool multiply = true;

String newValueSql = multiply ? "Value * @p0" : "@p0";
String updateQuery = @"UPDATE dbo.BudgetLine_type1_unpivoted set Value = " + newValueSql
    + " where valueTypeID='Value2' AND Dim2 in ('712','718','722') AND Dim4 = '110' AND Period = 1"

int noRowsAffected = db.Database.ExecuteSqlCommand(updateQuery, newValue);

运行查询时, @p0将替换为newValue的值,并且将是十进制值,因此计算有效。

暂无
暂无

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

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