C# 更新linq中的单行

C# 更新linq中的单行,c#,sql,linq,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正在传递

我正在尝试更新表的一行,特别是使用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 Profiler显示我没有更新任何内容。是否需要使用。首先?

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

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

db.Customer.First(x=> x.CustomerId == mymodel.CustomerId).FirstName = mymodel.FirstName;
db.Customer.First(x=> x.CustomerId == mymodel.CustomerId).LastName = mymodel.LastName;
db.SaveChanges();
或者:(我更喜欢这个!)


LINQ不用于更新,如
Q
=查询!您使用什么作为后端?LINQ2SQL?LINQ2Entities?为什么要回滚编辑?如果在OrDefault位发生时,下一行抛出空引用异常,那么您真的应该首先使用
。@PrestonGuillot同意在lambda中选择
g
。我通常使用
x
,很多人使用实体类型的第一个字母,在这种情况下
c
表示
Customer
。这并不是说这对代码的正确性有任何影响。@xdumaine我不知道这是否奇怪,但我使用方法的第一个字母,例如,对于
first
我使用
f
。它帮助我记住lambda表达式包含在哪个方法中(特别是当表达式变得很长时)。
db.Entry(mymodel).State = EntityState.Modified;
db.SaveChanges();