2011-06-12 65 views
3

在下面的代码中,我使用TryUpdateModel通过Id更新IndexOrder。下面更新命中DB 2次。一旦通过Id检索当前记录而不是更新单行。比较SQL更新的LINQ更新问题。需要帮助

我使用LINQ 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

在LINQ-to-SQL中,您可以使用Attach来实现此目的。下面的代码将与ID更新exisitin菜单项Order值1

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

该模拟为ObjectSet.Attach Method

+0

我正在使用LINQ到EF – Pirzada 2011-06-12 00:51:56

+0

@pirzada - 更新了答案。 – 2011-06-12 00:58:10