EF 4.4不检测AutoMapper所做的更改

时间:2012-09-19 14:06:30

标签: c# .net entity-framework automapper

我正在为webApi使用存储库模式,并尝试使Update工作。 这样做是从mvc webapi控制器接收一个“新”实体,并尝试更新现有对象

public void Update(TEntity entity)
        {

            var oldEntry = _context.Set<TEntity>().Find(entity.Id);

            oldEntry = Mapper.Map(entity, oldEntry);

            Console.WriteLine(oldEntry.ToString());

            _context.SaveChanges();

        }

保存更改无效。

如果我明确指定

oldEntry.SomeTextProperty = "TestText";

然后致电

 _context.SaveChanges();
一切都很好。 如何解决这个问题?或解决这个问题? 也许有办法告诉AutoMapper调用属性设置器?

2 个答案:

答案 0 :(得分:1)

在保存更改之前,您必须告诉EF您修改了实体。 这应该在框架4.5中起作用

_context.Set<TEntity>().AddOrUpdate(new[] {oldEntry});

或许这可能在框架4中:

_context.Entry(oldEntry).State = System.Data.EntityState.Modified;

答案 1 :(得分:0)

疯狂猜测:

AutoMapper使用反射来更新值,并且它做得很好。

但是它不会调用属性的setter中的任何内容,因此上下文不知道AutoMapper所做的更改,而SaveChanges()也没有做任何事情。

您可以尝试使用EmitMapper,它不使用反射。