2011-06-12 93 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