2013-02-13 19 views
0

我可以重組這個查詢,所以我不必從數據庫中獲取?我嘗試了各種技術,但都沒有工作。如何刪除此實體框架更新中的數據提取?

public void Update(CartEntryViewModel entry) 
     using (var context = new MyContext()) 
     { 
      User user = Auth.GetUser(context); 
      CartEntry model = context.CartEntries.Find(entry.Id); 

      // Change the item and update quantity 
      model.Item = context.Items.Find(entry.Item.Id); 
      model.Quantity = entry.Quantity; 
      context.Entries(model).EntityState = EntityState.Modified; 

      context.SaveChanges(); 
     } 
    } 

回答

0

Attach()方法使用已經擁有的模型並將其附加到上下文,就好像它剛剛從數據庫中讀取一樣。您只需更改狀態,以便上下文知道在調用SaveChanges()時更新數據庫中的相應行。

public void Update(CartEntryViewModel entry) 
{ 
    CartEntry model = new CartEntry 
    { 
     model.Id = entry.Id, 
     model.Item = entry.Item, 
     model.Quantity = entry.Quantity, 
     // Set other properties.  
    }; 

    using (MyContext context = new MyContext()) 
    { 
     context.CartEntries.Attach(model); 
     context.Entry(model).State = EntityState.Modified; 
     context.SaveChanges(); 
    } 
} 
+0

我更新了我的問題,'entry'不是保存到db的對象。 – 2013-02-13 21:06:55

+0

視圖模型是否包含逆向工程模型的所有必要信息?這真的是你能夠避免碰到數據庫的唯一方法。查看我對代碼片段的更新。 – 2013-02-13 21:14:46

+0

'entry.Item'不包含所有的信息。但是,該項目不會更改。 – 2013-02-14 20:16:48