无法使用LINQ进行更新

时间:2014-02-10 10:15:50

标签: c# linq

我正在尝试使用linq更新数据库中的列。以下是我用来更新用户ID的代码。我也尝试更新名称。不过,我无法更新记录。

DMS_GenericDataContext db = new DMS_GenericDataContext();

Document_Master doc1 = db.Document_Masters
  .Where(c => c.Document_Id_Prefix == "PRD_TST_TST1_T2_" && c.Document_Id == "2")
  .Single();

doc1.User_IDD = "anuragnigam";
db.SubmitChanges();

3 个答案:

答案 0 :(得分:1)

尝试

db.SaveChanges();

这会将在此上下文中所做的所有更改保存到底层数据库。 这是一个完整的主题,可以帮助您处理更新:Update Entity using DBContext

更新:您的版本似乎已经足够好了,您的实体/表必须有主键,主键有助于识别表并将其实例与其他实例区分开来

答案 1 :(得分:1)

using(DMS_GenericDataContext db = new DMS_GenericDataContext())
{

    Document_Master doc1 = db.Document_Masters
                             .Where(c => c.Document_Id_Prefix == "PRD_TST_TST1_T2_" &&                  c.Document_Id == "2")
                             .SingleOrDefault();

    // If the record exists, then make the corresponding update. 
    if(doc1!=null)
    {
       doc1.User_IDD = "anuragnigam";
       db.SaveChanges();
    }
}

当您使用像DataContext这样的一次性对象时,请尝试使用using语句。此外,您应该使用SingleOrDefault()而不是使用Single(),因为如果您使用后者并且没有任何类似您正在查找的记录,您将获得异常。另一方面,如果使用SingleOrDefault(),则不会出现异常。如果db中没有记录,您将获得一个null对象。最后但并非最不重要的,您应该检查Document_Master是否为空。如果不是,那意味着您的数据库中存在记录,您可以进行相应的更新。

答案 2 :(得分:1)

要更新现有但已断开连接的对象,您需要attach它执行数据上下文。 “附加”有一个可选的bool参数,可视为已修改。

doc1.User_IDD = "anuragnigam";
db.Document_Masters.Attach(doc1);
db.SubmitChanges();