Поле LINQ to SQL не обновляется (иногда) - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть веб-приложение MVC, использующее следующий подход:

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 не распознает обновление поля, поэтому оно исключается из сгенерированного запроса.

Может кто-нибудь сказать мне, если я 'я что-то здесь упускаю, что может быть причиной и / или как я могу это решить?

Примечание: Я не получаю никаких исключений и не могу проверить этот случай в разработкесценарий.

Ответы [ 3 ]

0 голосов
/ 14 апреля 2011

Возможно, у вас где-то где-то неявное / явное исключение привязки, плавающее где-то

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

Просто угадай конечно

0 голосов
/ 14 апреля 2011

Если Linq считает , что Status уже BarStatus.SomeStatus, он не будет обновлять его.

Что может случиться, если вы найдете запись с состоянием, установленным в это значение, а затем какая-то другая подпрограмма изменит ее, а затем, если вы используете тот же самый DataContext, вы получите старое значение из кэшированной копии и следовательно, Linq считает, что обновлять его не нужно.

0 голосов
/ 14 апреля 2011

По моему опыту, если ошибка случайная и вы не можете воспроизвести ее в процессе разработки, то проблема заключается в ошибке пользователя.

Программирование было бы действительно сложным, если бы .net framework или CLR просто случайно решили сделать что-то по-другому.

...