2014-04-02 52 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

非常感谢。这就是代码的美妙之处 –