我有以下代码
Customer customer = (from x in db.Customers where x.CustomerID.Equals(cust.CustomerID.Value) select x).SingleOrDefault();
customer = newcustomer;
db.SubmitChanges();
通过执行上面的代码,我能够将新数据获取到客户对象中,
但是通过执行 SubmitChanges()
它无法更新到数据库中。
我需要编写以下机制来将值更新到数据库中。
customer.CustomerName = "James";
customer.DisplayName = "Jimmy";
db.SubmitChanges();
有什么建议吗?
最佳答案
您不能这样做,因为您更改了 customer
指向的引用。因此 ORM 会丢失您对从数据库中检索的对象所做的更改。实际上,当您从数据库中获取特定客户的记录时,如下所示:
Customer customer = (from x in db.Customers
where x.CustomerID.Equals(cust.CustomerID.Value)
select x).SingleOrDefault();
您创建一个对象,其属性具有您获取的记录中的值。例如,稍后您更改 CustomerName
customer.CustomerName = "James";
然后调用 SubmitChanges
方法:
db.SubmitChanges();
一个进程运行,检测对对象所做的任何更改。此过程发现您已更改 CustomerName
的值,并且 ORM 将创建适当的 UPDATE 语句。最后将这条语句发送到数据库,以便执行。
另一方面,如果您更改 customer
的值,更改检测 过程将确定检索到的记录没有任何更改。发生这种情况的原因是ORM 知道记录的唯一方法是通过它在检索后对创建的对象的引用。改变这个你会从你的上下文中丢失它。
关于c# - 如果我们直接将新对象值赋给旧对象,为什么 Linq to sql 无法跟踪更新信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43949129/