Обновление сущности с помощью LINQ TO SQL

2

Я пытаюсь обновить запись db с помощью linq to sql

Сначала я запрошу его

MyObject obj = (from o in objRepository.List where(o.ID == id) select i).SingleOrDefault();

то я пытаюсь обновить и изменить данные

obj.Name = "some value"

dataContext.Attach(obj)
dataContext.Context.Refresh(RefreshMode.KeepCurrentValues, obj);

Я получаю InvalidOperationException в строке, где прикреплен контент. В нем говорится, что его невозможно прикрепить Сущность, которая уже существует.

Кто-нибудь может мне помочь? Спасибо.

Теги:
linq-to-sql

1 ответ

1
Лучший ответ

Любой объект, обновленный с LINQ to SQL, автоматически известен, поэтому, если вы получаете объект из репозитория, и он знает о контексте данных, его не нужно прикреплять. Вы можете просто подписать() с контекстом данных, и эти изменения будут обновлены в базе данных.

Поэтому, когда вы запрашиваете из контекста данных, как только свойство изменяет свое значение, контекст данных уже знает об изменении, а вызов SubmitChanges() подталкивает его в БД и обновляет ссылки на эти объекты (так что вы может сверлить).

  • 0
    Эй, спасибо за быстрый ответ. Я прокомментировал призыв присоединиться, и он успешно обновился. Но я обновлял все свои сущности, как это, на протяжении всего проекта, и он работал. Вы знаете, почему в данном конкретном случае это не так? : D thx
  • 0
    Не уверен ... сущности, которые уже опрошены с контекстом данных, знают об этом контексте данных; attach был предназначен для сущностей, не привязанных к контексту, поэтому я подумал, что он не должен работать таким образом ... поэтому я озадачен, что он сработал для вас таким образом ... Если только вы не отключите отслеживание изменений в вашем проект, или что-то еще, что может быть в этом случае?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню