LINQ到SQL字段不更新(有时)

本文关键字:有时 更新 SQL 字段 LINQ | 更新日期: 2023-09-27 17:50:17

我有一个MVC Web应用程序使用以下方法:

public class MyController : Controller
{
    public FooRepository fooRepository = new FooRepository();
    public BarRepository barRepository = new BarRepository();
    public ActionResult UpdateItems(int id, int range1, int range2)
    {       
        Foo foo = fooRepository.GetItem(id);
        List<Bar> bars = barRepository.GetItemsByRange(range1, range2);
        // Some validation rules here...
        DoSomeWork(foo, bars);
        // Show confirmation / error message
    }
    private void DoSomeWork(Foo foo, List<Bar> bars)
    {
        foreach(int i = 0; i < bars.Count; i++)
        {
            bars[i].Prop1 = foo.Prop1; // This field is updated
            bars[i].Owner = "someuser"; // This one too
            bars[i].Status = BarStatus.SomeStatus; // This isn't...
        }
        foo.Status = FooStatus.SomeStatus; // Ok
        // Calls DataContext.SubmitChanges()
        fooRepository.SubmitChanges();
        barRepository.SubmitChanges();      
    }
}

然而,在一些"随机"情况下(我没有看到任何模式),其中一个字段没有更新,如注释所述。

LINQ似乎没有识别字段的更新,所以它被排除在生成的查询之外。

谁能告诉我,如果我在这里错过了什么,什么可能导致它和/或我如何解决它?

注意:我没有得到任何异常,无法在开发场景中验证这种情况

LINQ到SQL字段不更新(有时)

根据我的经验,如果错误是随机的,并且你不能在开发中重现,那么问题就是用户错误。

如果。net框架或CLR只是随机地决定做不同的事情,编程将是非常困难的。

您可能有一个隐式/显式绑定排除浮动在某处

[Bind(Exclude="...,Status,...")]

当然只是猜测

如果Linq 认为状态已经是BarStatus。SomeStatus,那么它就不会更新它

可能发生的是,你找到一个记录的状态设置为这个值,然后一些其他例程改变它,然后,如果你使用相同的DataContext,你会得到旧值从缓存的副本,因此Linq认为它不需要更新它。