当前位置: 动力学知识库 > 问答 > 编程问答 >

asp.net mvc 3 - Subsonic and Automapper - dirtyColumns collection is empty therefore can't update

问题描述:

I'm using Subsonic 3 and Automapper on an asp.net MVC3 project.

In my HttpPost ActionResult, I'm taking my model and mapping it to my Subsonic generated entity.

The mapping works no probs, but I can't update the entity.

Upon further inspection, it is because I have no dirty columns, therefore my call to Update() fails as Subsonic doesn't think it needs to update anything.

I've re-jigged the code loads - even forcing the method to load the entity from the db again before mapping against the model. It just seems that the mapping destroys the dirtyColumns tracking. E.g. if I map after loading from the DB, and then change a random property, it doesn't get marked as a dirty column.

I've also tried using the SetIsLoaded(true) method call. No joy after mapping.

Here's my method:

 [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);

}

The Static methods on my PersonRepository just call subsonic's Update() and Save() respectively.

Any ideas would be much appreciated. I'm now thinking that I may need to put some additional properties into my model to make sure that they get carried over into the entity by the automapper.

In the worst case I'll have to just not use the Automapper when mapping back to entities from the model, which would suck.

网友答案:

AutoMapper.Mapper.Map<SinglePersonModel, Data.Person>(model, person); - Have you tried it like this? This doesn't assign a new instance of the object but assigns it to the existing object. Just a thought. I understand the want of not loading it from the db. But figured this might help a bit :)

Thanks for that - glad to help out :)

分享给朋友:
您可能感兴趣的文章:
随机阅读: