更新linq中的单行

时间:2013-10-08 15:49:00

标签: c# sql linq

我有一个新手问题。

我尝试更新表的一行,特别是使用linq使用主键值。

 var mytab = new Customer();
 mytab.FirstName = mymodel.FirstName;
 mytab.LastName = mymodel.LastName;
 mytab.CustomerId = mymodel.CustomerId;

 db.AddToCustomer(mytab);
 db.SaveChanges()

这只会添加一个带有新ID的新行。单步执行代码会显示“mymodel”正在传递正确的值,并带有我要更新的名字或姓氏。

mymodel.CustomerId是我要更新的记录的正确ID,但SQL事件探查器显示我没有更新任何内容。我需要使用.First吗?

2 个答案:

答案 0 :(得分:7)

您的代码会创建新行。要进行更新,首先需要从数据库中选择您的客户ID,然后更新:

var mytab = db.Customers.First(g=>g.CustomerId == mymodel.CustomerId);
 mytab.FirstName = mymodel.FirstName;
 mytab.LastName = mymodel.LastName;
 db.SaveChanges()

答案 1 :(得分:0)

试试这个:

db.Customer.First(x=> x.CustomerId == mymodel.CustomerId).FirstName = mymodel.FirstName;
db.Customer.First(x=> x.CustomerId == mymodel.CustomerId).LastName = mymodel.LastName;
db.SaveChanges();

或者:(我更喜欢这个!)

db.Entry(mymodel).State = EntityState.Modified;
db.SaveChanges();