Проблемы с вложениями сущностей в LINQ - PullRequest
16 голосов
/ 11 февраля 2009

Я пытаюсь присоединить объект LINQ к контексту данных после того, как получу его из формы POST. Тем не менее, все, что я получаю, это следующее исключение:

An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.

Я также попытался прикрепить исходный ряд, например:

dataContext.People.Attach(person, originalPerson);

В этом случае я получаю следующее исключение:

Object reference not set to an instance of an object.

Вот код в моем контроллере:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, Person person) {
    var prevPerson = dataContext.People.Single(p => p.ID == id);
    dataContext.People.Attach(person, prevPerson);
    dataContext.SubmitChanges();
    return Redirect("~/People/Index");
}

Есть идеи, что я здесь делаю не так? Я могу опубликовать код объекта, если это необходимо.

Ответы [ 3 ]

16 голосов
/ 30 января 2012

Попробуйте следующее:

dataContext.People.Attach(person);
dataContext.Refresh(RefreshMode.KeepCurrentValues, person);
dataContext.SubmitChanges();
12 голосов
/ 11 февраля 2009

В конструкторе LinqToSQL установите для всех проверок обновлений значение Никогда, а при подключении вызывайте его так:

 context.entity.Attach(entity, true);

В качестве альтернативы, вы также можете извлечь сущность из БД и изменить ее, используя данные из сущности POSTed, а затем представить ее как изменение.

0 голосов
/ 04 марта 2016

Я решил, установив UpdateCheck=Never для моего свойства в файле .Dbml и context.entity.Attach(entity, true);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...