2014-04-02 48 views
0

我想保存數據,當我編輯東西在我的數據表輸入。 在輸入控制進入實際更新執行的控制器中的方法。使用LINQ lambda將單列更新到EF 6.0? MVC4

我的代碼,直到這一點:

public string UpdateData(int id, string value, int? rowId, int? columnPosition, int? columnId, string columnName) 
{ 
    var Leadsinfo = ser_obj1.Lead_List(); 

    if (columnPosition == 0 && Leadsinfo.Any(c => c.Contact_Name.ToLower().Equals(value.ToLower()))) 
     return "Lead with a name '" + value + "' already exists"; 
    var Lead = Leadsinfo.FirstOrDefault(c => c.Lead_Id == id); 
    if (Lead == null) 
    { 
     return "Lead with an id = " + id + " does not exists"; 
    } 
    switch (columnPosition) 
    { 
     case 0: 
      Lead.Contact_Name = value; 
      iWise_NeoEntities ooo = new iWise_NeoEntities(); 
      break; 
     case 1: 
      Lead.Contact_Address = value; 
      break; 
     case 2: 
      Lead.Lead_Source = value; 
      break; 
     case 3: 
      Lead.Domain = value; 
      break; 
     default: 
      break; 
    } 
    return value; 
} 

在我提到我需要編寫邏輯,它應該在任何列編輯保存到數據庫上面的代碼。使用lambda linq很容易,我猜,但我不知道如何開始? 我需要在每種情況下寫保存嗎?

+0

您需要使用您的上下文的「調用SaveChanges」的方法。你不需要把它放在每一個案例中。我會把它放在switch語句下。 ef將檢測保存中更改了哪些數據。 –

回答

1

可以在數據庫中創建更新方法:

public void UpdateLead(Lead model) 
{ 
    var entity = db.Set<Lead>().Find(model.Id); 
    db.Entry<Lead>(entity).CurrentValues.SetValues(model); 
    db.SaveChanges(); 
} 

而在你需要使用它:

switch (columnPosition) 
{ 
    case 0:  Lead.Contact_Name = value;  break; 
    case 1:  Lead.Contact_Address = value; break; 
    case 2:  Lead.Lead_Source = value;  break; 
    case 3:  Lead.Domain = value;   break; 
    default:          break; 
} 

iWise_NeoEntities ooo = new iWise_NeoEntities(); 

ooo.UpdateLead(Lead); 
+0

非常感謝。這就是代碼的美妙之處 –