3

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にプロパティセッターを呼び出すように指示する方法はありますか?

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 に答える