2

GraphDiff を使用して、切り離されたエンティティをデータベースに挿入しようとしています。

それは次のようになります:

public IHttpActionResult Post([FromBody] Foo foo) {
    var newFoo = fooBusiness.AddObject(foo);
    if (newFoo != null) {
        return CreatedAtRoute("GetOperation", new { id = newFoo.Id }, newFoo);
    }
    return Conflict();
}

そして、私のaddObject機能は基本的に次のとおりです。

public Foo AddObject(Foo entity)
{
    UpdateGraph(entity);
    _context.SaveChanges();
    return entity;
}

public override void UpdateGraph(Foo entity)
{
    DataContext.UpdateGraph(entity, map => map
        .AssociatedCollection(e => e.Bars)
        .AssociatedEntity(e => e.Baz)
    );
}

新しく追加された Foo の ID を取得しようとすると問題が発生し、空 (0) のままになります。

EF はオブジェクトを実際にデータベースに挿入したものに更新すべきではありませんか? 何か足りないのですか?

4

1 に答える 1

3

質問を投稿する直前にUpdateGraph、戻り値の型があり、それを使用していないことがわかりました..

返されたエンティティを使用しない場合、エンティティの状態は適切に更新されますが、エンティティの追跡は完全に失敗します。

私をこれに変更するAddObjectと、問題が解決しました:

public Foo AddObject(Foo entity)
{
    entity = UpdateGraph(entity);
    _context.SaveChanges();
    return entity;
}

public override Foo UpdateGraph(Foo entity)
{
    return DataContext.UpdateGraph(entity, map => map
        .AssociatedCollection(e => e.Bars)
        .AssociatedEntity(e => e.Baz)
    );
}
于 2014-12-19T10:29:05.313 に答える