SUBSONIC和AUTOMAPER - DirtyColumns集合为空,因此无法更新
-
14-11-2019 - |
题
我在ASP.NET MVC3项目上使用括号3和automapper。 在我的httppost actionResult中,我正在拍摄我的模型并将其映射到我的子句生成的实体。
映射不起作用,但我无法更新实体。
在进一步检查时,它是因为我没有脏列,因此我对更新()的调用失败,因为subsonic并不认为它需要更新任何内容。
我已经重新旋转了代码加载 - 即使强制使用该方法在映射到模型之前再次从DB加载实体。似乎映射似乎会破坏DirtyColumns跟踪。例如。如果我从db加载后映射,然后更改随机属性,它不会被标记为脏列。
我还尝试使用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);
}
.
我的handerRepository上的静态方法只需调用子系统的Update()并分别保存()。
任何想法都会受到欣赏。我现在认为我可能需要将一些额外的属性放入模型中,以确保他们通过automapper被携带到实体中。 在最坏的情况下,我必须在从模型中映射回到实体时,我必须不要使用automapper,这会很糟糕。
解决方案
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 :)