DataContext удаляется перед обновлением поля внешнего ключа - PullRequest
2 голосов
/ 26 января 2011

У меня проблемы с DataContexts, использующими linq to sql для веб-приложения asp.net c #.

Сначала у меня возникли проблемы с выдачей исключений, поскольку я не избавлялся от DataContext, те же ошибки, что и в в этом вопросе . Я использовал статический DataContext, поэтому, вероятно, он не был утилизирован должным образом, и после прочтения this и нескольких других статей я обернул все вызовы в использование операторов, чтобы быть уверенным, что они будут удалены.

Однако теперь у меня возникли проблемы, когда мне нужно обновить внешний ключ, поскольку DataContext уже был удален. Я не уверен, почему он уже был удален, и что было бы лучше сделать в этом сценарии, чтобы любые идеи были бы высоко оценены!

Краткий пример здесь:

ОБНОВЛЕНИЕ: Я думаю, что мой пример был слишком запутанным, когда я пытался сделать его как можно более коротким, поэтому вот более длинный и, надеюсь, лучший пример:

private static void SendTexts(List<TextAlert> TextQueue)
{
    using (THTDataContext db = new THTDataContext())
    {
        foreach (TextAlert text in TextQueue)
        {
            try
            {
                // do IntelliSMS stuff

                // set status to 'sent'
                text.Status = 1;

                db.SubmitChanges();
            }
            catch (IntelliSMSException ex)
            {
                // set status to 'failed'
                text.Status = 2;

                db.SubmitChanges();
            }
        }
    }
}

Спасибо

Annelie

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Возможно, вам нужно прикрепить входящий MyThing к вашему новому контексту.Нечто подобное может работать:

private static void DoMyStuff(MyThing thing)
{
    using (MyDataContext db = new MyDataContext())
    {
       db.MyThings.Attach(thing);
       thing.Status = 1;
       db.SubmitChanges();
    }
}

После того, как он присоединен, контекст должен иметь возможность отслеживать изменения в нем и, при отправке, сохранять их.

Если это не помогает«уже утилизированные» исключения, тогда вы можете попробовать «отсоединить» MyThing перед удалением старого контекста.Обратите внимание, что если вам нужно пойти по этому пути, жизненный цикл вашего DataContext, вероятно, будет неправильным, поскольку сущности не предназначены для перемещения между контекстами в одном домене приложения.

Если вы заинтересованы в пониманииПрикрепление / отсоединение немного лучше, у Динеша Кулкарни из MSDN есть короткое сообщение в блоге об этом.

3 голосов
/ 26 января 2011

Хлоп! Если при попытке обновить запись в базе данных было сгенерировано исключение, действительно ли вы считаете, что в обработчике исключений было бы неплохо обновить запись в базе данных?

Что касается того, что здесь происходит, каков источник thing? Это произошло из запроса, который был выполнен на другом экземпляре MyDataContext? Если так, то это твоя проблема.

...