Linq to SQL заменяет связанный объект - PullRequest
3 голосов
/ 31 августа 2010

У меня есть сущность Client и сущность PostCode в модели Linq to SQL.Таблица Clients в базе данных содержит столбец client_postcode, который является столбцом FK для столбца почтового индекса в таблице PostCode, которая является первичным ключом столбца varchar для таблицы PostCode.

При обновлении клиента в моем кодеЯ делаю это

        // postcode
        updating.PostCode = (from p in ctx.PostCodes
                             where p.postalcode.Equals(client.PostCode.postalcode)
                             select p).First();

, где client объект предоставляется из формы ASP.NET MVC View.Похоже, этот код отлично устанавливает сущность, связанную с PostCode.Но при вызове SubmitChanges () я получаю следующее исключение:

Значение элемента 'postalcode' объекта типа 'PostCode' изменилось.Член, определяющий идентичность объекта, не может быть изменен.Попробуйте добавить новый объект с новым идентификатором и удалить вместо него существующий.

Так что в настоящее время я не могу изменить связанный объект.Как это сделать в Linq to Sql?

ОБНОВЛЕНИЕ:

После дальнейшего просмотра и устранения неполадок я обнаружил, что проблема в вызове ASP.NET MVC UpdateModel ().Если я вызываю UpdateModel (), чтобы обновить существующую сущность с отредактированными данными, что-то не так с назначением FK для PostCode.Если я не вызываю UpdateModel и делаю это вручную, это работает.Любые идеи, что идет не так в UpdateModel (), что он не может правильно установить отношения с объектами внешнего ключа?

Я обновляю этот вопрос и начинаю вознаграждение.Вопрос упрощен.Как успешно использовать L2S и UpdateModel () для работы при обновлении элементов (со связанными объектами как FK) в представлениях Edit ASP.NET MVC?

Ответы [ 3 ]

2 голосов
/ 06 сентября 2010

Мне кажется, что вы получаете PostCode.postalcode в запросе http post .

В зависимости от того, как работает привязка модели, UpdateModel вызывает обновляет .PostCode.postalcode модели , которую вы передаете ей.

Используйте эту перегрузку для включения или исключения определенных свойств .

0 голосов
/ 06 сентября 2010

Вы не можете делать то, что пытаетесь, вы не можете изменить Postcode таким образом.

Идея Джеймса в правильном направлении.

Updatemodel() принимает совпадающие значения из Formcollection

Как эти значения входят в Formcollection? Каковы их keys?

в основном есть 2 способа редактирования объекта.

вариант 1:

все имена значений, которые вы хотите обновить, имеют соответствующие ключи в Formcollection, что оставляет вас просто для вызова UpdateModel() оригинального объекта. делать SubmitChanges()

вариант 2:

Получите оригинальный объект, измените его значения вручную (потому что ключи не соответствуют) и выполните SubmitChanges()

вы пытаетесь изменить ссылку, вы не можете этого сделать. Вы можете редактировать только update.client_postcode, который в данном случае является строкой?

Не могли бы вы скопировать все действие здесь? Так что я могу написать код для вас без азартных игр.

0 голосов
/ 31 августа 2010

Не будет updating.client_postcode = client.client_postcode; выполнить то, что вы хотите?

Client.PostCode следует искать при поиске на основе client_postocde.

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