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()")