Почему обновление объекта работает только одним, определенным образом? - PullRequest
1 голос
/ 19 января 2011

Я пытаюсь обновить объект, используя EF4.Объект передается со строго типизированной страницы в метод действия и

[HttpPost]
public ActionResult Index(Scenario scenario, Person person)
{
    // Some business logic.

    // Update Scenario with Person information.
    scenario.Person = person;

    // Update the corresponding object and persist the changes.
    // Note that the repository stems from the repository pattern. Contains the ObjectContext.
    Scenario updateScenario = repository.GetScenario(scenario.ScenarioID);
    updateScenario = scenario;

    repository.Save();
}

Однако проблема в том, что изменения не сохраняются, когда я делаю это.Однако если я вместо этого обновлю каждое отдельное свойство в сценарии, а затем сохраню изменения (с помощью метода Save), все сохранится.

Я запутался, почему это происходит.В моем реальном приложении в сценарии есть МНОЖЕСТВО элементов и подобъектов, поэтому невозможно обновить каждое отдельное свойство.Может кто-нибудь помочь разобраться, что происходит и что мне нужно сделать, чтобы это исправить?

1 Ответ

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

В контексте вашего метода действия у вас есть два разных объекта типа Сценарий.сценарий указывает на один из объектов, а updateScenario указывает на другой.С помощью строки кода:

updateScenario = scenario

Все, что вы делаете, заставляете updateScenario указывать на тот же объект, на который указывает сценарий, вы не копируете значения, составляющие объект, из одного в другой.По сути, контекст вашей базы данных знает только 1 из 2 экземпляров сценария.Другой экземпляр сценария был создан вне контекста, и контекст не был информирован об этом.

В вашем конкретном сценарии вы можете достичь желаемого, не используя сценарий для своего параметра, и вместо этого:извлеките сценарий, который вы хотите обновить, из контекста базы данных, и в методе действия вызовите:

this.TryUpdateModel(updateScenario);

Это приведет к тому, что механизм связывания модели обновит свойство / поля объекта сценария, которым является контекст вашей базы данныхзнать, и, следовательно, будут сохраняться изменения, когда вы звоните Save().

HTH

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