0

複数の関連エンティティでエンティティを更新する際に問題が発生しました。記事エンティティと記事を関連付けることができるカテゴリのリストで構成される非常に単純なモデルがあります。チェックボックスリストから、これらのカテゴリのどれがそれに関連付けられているかを選択できます...これは正常に機能します。

dbContextを使用して既存のエンティティを実際に更新しようとすると、問題が発生します。このエンティティを更新しているときに、更新を正しく実行できるように、後で再接続する準備ができているコンテキストからエンティティをすでに切り離しています。

モデルを投稿した後、カテゴリが記事エンティティに正常に追加されており、エラーが発生せずにリポジトリで更新されているように見えます。

データベースを見ると、記事は通常どおり更新されていますが、カテゴリは更新されていません。

これが私の(簡略化された)更新コードです...

    public virtual bool Attach(T entity)
    {
        _dbContext.Entry(entity).State = EntityState.Modified;
        _dbSet.Attach(entity);

        return this.Commit();
    }

どんな助けでも大歓迎です。

4

1 に答える 1

0

わかりました、私は今私が間違っていたことを理解しています。私は以下を使用して、コントローラーアクションに到達する前に、コンテキストからエンティティを選択してバインドをモデル化しました。

T entity = _dbSet.Find(id);    
_dbContext.Entry(T).State = EntityState.Detached;
return entity;

それ以外の...

return _dbSet.AsNoTracking().FirstOrDefault(predicate);

エンティティをデタッチすると、ナビゲーションプロパティが読み込まれなくなるため、変更を加えることができなくなります。AsNoTracking()を使用すると、ナビゲーションプロパティが読み込まれますが、エンティティオブジェクトをアタッチして更新することもできます。

これが同様の状況で他の誰かを助けることを願っています。

于 2012-11-02T10:59:02.100 に答える