3

我正在为我的 webApi 使用存储库模式,并尝试使更新工作。这样做是从 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 调用属性设置器?

4

2 回答 2

1

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

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

或者也许在框架 4 中:

_context.Entry(oldEntry).State = System.Data.EntityState.Modified;
于 2012-09-19T14:09:59.900 回答
0

胡乱猜测:

AutoMapper 使用反射来更新值,它在这方面做得很好。

但是它不会调用属性设置器中的任何内容,因此上下文不知道 AutoMapper 所做的更改,并且 SaveChanges() 不执行任何操作。

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

于 2012-09-19T14:10:37.153 回答