我在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 :)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top