C# Linq-to-SQL 更新多个值不保存
C# Linq-to-SQL update multiple values not saving
我有一个足够简单的更新语句,但似乎不起作用。
try
{
AdventureWorksDataContext k = new AdventureWorksDataContext(@"Data Source = UKFOLONLAP0255\SQLEXPRESS; Initial Catalog = AdventureWorks2014; User ID = sa; Password = #######");
k.TOP_STANDARD_COSTs.ToList().ForEach(t => {
t.Id = Guid.NewGuid();
});
k.SubmitChanges();
}
catch (Exception)
{
throw;
}
t.Id
的值仅在 foreach 循环中保留。一旦调试器从循环中退出,该值就变为空。我尝试将提交更改放入循环中,但没有任何乐趣。
有人可以帮忙吗?
请试试这个:
try
{
using (AdventureWorksDataContext k = new AdventureWorksDataContext(@"Data Source = UKFOLONLAP0255\SQLEXPRESS; Initial Catalog = AdventureWorks2014; User ID = sa; Password = #######"))
{
foreach(var t in k.TOP_STANDARD_COSTs)
{
t.Id = Guid.NewGuid();
}
k.SubmitChanges();
}
}
catch (Exception)
{
throw;
}
根据您提供的代码,我猜我们您正试图将值 Guid.NewGuid()
分配给 k.TOP_STANDARD_COSTs
中每个对象的 ID 属性。假设我已经正确理解你的问题,这可以通过一个简单的 foreach 循环来实现:
foreach(var t in k.TOP_STANDARD_COSTs)
{
t.Id = Guid.NewGuid();
}
k.SubmitChanges();
无法在 foreach 循环之外获取 t.Id 值的原因是因为该特定变量的范围仅在循环范围内。更新列表中对象的 ID 属性 后,您可以更新数据库中的更改。
告诉上下文数据被修改了
foreach(var t in k.TOP_STANDARD_COSTs)
{
t.Id = Guid.NewGuid();
k.Entry(t).State = System.Data.EntityState.Modified;
}
k.SubmitChanges();
请注意,如果记录数很大,则代码效率不高。最好在 sql 服务器端执行此更新。
k.Database.ExecuteSqlCommand("update TOP_STANDARD_COSTs set Id=newid()")
我有一个足够简单的更新语句,但似乎不起作用。
try
{
AdventureWorksDataContext k = new AdventureWorksDataContext(@"Data Source = UKFOLONLAP0255\SQLEXPRESS; Initial Catalog = AdventureWorks2014; User ID = sa; Password = #######");
k.TOP_STANDARD_COSTs.ToList().ForEach(t => {
t.Id = Guid.NewGuid();
});
k.SubmitChanges();
}
catch (Exception)
{
throw;
}
t.Id
的值仅在 foreach 循环中保留。一旦调试器从循环中退出,该值就变为空。我尝试将提交更改放入循环中,但没有任何乐趣。
有人可以帮忙吗?
请试试这个:
try
{
using (AdventureWorksDataContext k = new AdventureWorksDataContext(@"Data Source = UKFOLONLAP0255\SQLEXPRESS; Initial Catalog = AdventureWorks2014; User ID = sa; Password = #######"))
{
foreach(var t in k.TOP_STANDARD_COSTs)
{
t.Id = Guid.NewGuid();
}
k.SubmitChanges();
}
}
catch (Exception)
{
throw;
}
根据您提供的代码,我猜我们您正试图将值 Guid.NewGuid()
分配给 k.TOP_STANDARD_COSTs
中每个对象的 ID 属性。假设我已经正确理解你的问题,这可以通过一个简单的 foreach 循环来实现:
foreach(var t in k.TOP_STANDARD_COSTs)
{
t.Id = Guid.NewGuid();
}
k.SubmitChanges();
无法在 foreach 循环之外获取 t.Id 值的原因是因为该特定变量的范围仅在循环范围内。更新列表中对象的 ID 属性 后,您可以更新数据库中的更改。
告诉上下文数据被修改了
foreach(var t in k.TOP_STANDARD_COSTs)
{
t.Id = Guid.NewGuid();
k.Entry(t).State = System.Data.EntityState.Modified;
}
k.SubmitChanges();
请注意,如果记录数很大,则代码效率不高。最好在 sql 服务器端执行此更新。
k.Database.ExecuteSqlCommand("update TOP_STANDARD_COSTs set Id=newid()")