如何使用LINQ到SQL更新?(How to update with Linq-To-SQL?)

2019-08-01 02:06发布

我需要更新值,但我循环中的所有表值做到这一点:

public static void Update(IEnumerable<Sample> samples
    , DataClassesDataContext db)
{
    foreach (var sample in db.Samples)
    {
        var matches = samples.Where(a => a.Id == sample.Id);
        if(matches.Any())
        {
            var match = matches.First();
            match.SomeColumn = sample.SomeColumn;
        }
    }
    db.SubmitChanges();
}

我相信上面的代码是不这样做的正确的方式,但我想不出任何其他方式呢。 你能表现出更好的办法?

Answer 1:

是的,有一个简单的方法。 要简单得多。 如果您将实体上下文,然后刷新(与选定KeepCurrentValues),LINQ到SQL将获得这些实体从服务器,对它们进行比较,并标记更新的那些不同。 您的代码会是这个样子。

public static void Update(IEnumerable<Sample> samples
    , DataClassesDataContext db)
{
    db.Samples.AttachAll(samples);
    db.Refresh(RefreshMode.KeepCurrentValues, samples)
    db.SubmitChanges();
}

在这种情况下,LINQ to SQL的使用键来匹配和更新记录,这样,只要你的钥匙都在同步,你的罚款。



Answer 2:

随着LINQ2SQL(或LINQ到实体),没有办法*更新服务器上的记录,而不完全第一取回他们,所以你在做什么实际上是正确的。

如果你想避免这种情况,写一个存储过程,你想要什么,并把它添加到你的模型。

我不能完全肯定,如果这是你的预期问题,但:)

*:有一个围绕着使用LINQ建立一个SELECT语句并以某种方式屠宰产生的SELECT语句为UPDATE一些黑客,但我不会推荐它。



文章来源: How to update with Linq-To-SQL?