在下面的代码中,我使用TryUpdateModel通过Id更新IndexOrder。以下更新命中DB 2次。通过Id检索当前记录而不是更新单行。
我正在使用LINQ To EF
foreach (var i in indexArraay)
{
SubMenu existingMenu = _menu.SubSingle(Int32.Parse(i.id.ToString()));
existingMenu.IndexOrder = string.IsNullOrEmpty(i.index.ToString()) ? 0 : Int32.Parse(i.index.ToString());
TryUpdateModel(existingMenu);
_menu.Add();
}
在SQL中,我们不会像在下面的语句中那样做。
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
我在某处错了还是有更好的方法来编写LINQ更新表达式?
我不是在谈论表演。
答案 0 :(得分:0)
在LINQ-to-SQL中,您可以使用Attach
。以下代码将更新id为1的exisitin菜单项的Order
值。
int myId = 1;
int newOrder = 10;
using (var dataContext = new DataContext("..."))
{
var table = dataContext.GetTable(typeof(Type));
var menuItem = new MenuItem { Id = myId };
table.Attach(menuItem);
menuItem.Order = newOrder;
dataContext.SubmitChanges();
}
<强> [编辑] 强>
对于LINQ到实体,请查看Attaching and Detaching Objects。