Subsonic и Automapper - коллекция dirtyColumns пуста, поэтому не может обновляться - PullRequest
2 голосов
/ 31 марта 2011

Я использую Subsonic 3 и Automapper в проекте asp.net MVC3.

В моем HttpPost ActionResult я беру свою модель и сопоставляю ее с моей сгенерированной Subsonic сущностью.

Отображение не работает, но я не могу обновить сущность.

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

Я переназначил загрузку кода - даже заставляя метод снова загружать сущность из БД перед сопоставлением с моделью. Просто кажется, что отображение разрушает отслеживание dirtyColumns. Например. если я сопоставлю после загрузки из БД и затем изменю случайное свойство, оно не будет помечено как грязный столбец.

Я также пытался использовать вызов метода SetIsLoaded (true). Нет радости после картирования.

Вот мой метод:

    [HttpPost]
    public virtual ActionResult Edit(SinglePersonModel model)
    {
        if (ModelState.IsValid)
        {
            Data.Person person;

            //Now Map my model to my entity - this works
            Mapper.CreateMap<SinglePersonModel, Data.Person>();
            person = Mapper.Map<SinglePersonModel, Data.Person>(model);

            //THIS DOESN'T SET MY COLUMN TO DIRTY
            person.Link = "asdjsadij";

            //THIS DOESN'T SET MY COLUMN TO DIRTY EITHER
            person.SetIsLoaded(true);
            person.Link = "asdjsadij";

            if (person.PersonId > 0)
                PersonRepository.UpdatePerson(person);
            else
                PersonRepository.CreatePerson(person);

            return RedirectToAction(MVC.SecureAdministration.Person.Index());
        }
        else return View(model);
    }

Статические методы в моем PersonRepository просто вызывают subsonic Update () и Save () соответственно.

Любые идеи будут высоко оценены. Теперь я думаю, что мне может понадобиться добавить некоторые дополнительные свойства в мою модель, чтобы они могли быть перенесены в сущность автоматом.

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

1 Ответ

1 голос
/ 31 марта 2011

AutoMapper.Mapper.Map<SinglePersonModel, Data.Person>(model, person); - Вы пробовали это так?Это не назначает новый экземпляр объекта, но назначает его существующему объекту.Просто мысль.Я понимаю необходимость не загружать его из БД.Но подумал, что это может немного помочь:)

Спасибо за это - рад помочь:)

...