Entity Frameworkを初めて導入しましたので、何か間違いを指摘することを躊躇しないでください。とにかく私はそれを理解しながら私の問題を説明しようとします。N-TierアプリケーションでのEntity FrameworkとDetailsView
私はEntity Frameworkでn層アプリケーションを作成しています。また、this pageに記載されているような汎用リポジトリも使用しています。
私はDetailsView
を入力し、ObjectDataSourceを介してデータベースに値を挿入できました。しかし、私が遭遇している問題は、私が更新しているときに発生します。私が手
エラーが
されたオブジェクトのキーが ObjectStateManagerで見つけることができませんでし一致するキーを持つオブジェクトです。指定したオブジェクトのキー値 が、 の変更を適用する必要があるオブジェクトのキー値と一致することを確認します。
そして私はそれも起こる理由を理解しています。私は以下の方法を使用してDBから値を入力します。私はGetAll
メソッドにブレークポイントを入れて、私はEntityKey
が設定さIsChangeTracked
は、リスト内の各オブジェクトについても同様ですされていることが分かり結果を観察した場合
public IEnumerable<TEntity> GetAll<TEntity>() where TEntity : class
{
return GetQuery<TEntity>().AsEnumerable();
}
public List<Company> GetAllCompanies()
{
return _genericRepository.GetAll<Company>().ToList();
}
。
しかし、私はObjectDataSource
に指定さUpdateMethod
に渡されたオブジェクトをチェックすると、その後、EntityKey
がnullの場合、EntityState
が切り離されるとIsChangeTracked
はfalseです。したがって、EntityKeyがnullなので、例外が有効であることを理解しています。
私の更新方法は、
public void Update<TEntity>(TEntity entity) where TEntity : class
{
ObjectSet<TEntity> objSet = DataContext.CreateObjectSet<TEntity>();
objSet.ApplyCurrentValues(entity);
SaveChanges();
}
のように見える私は、何の例外をobjSet.Attach(entity);
を使用していない添付しようとしましたが、オブジェクトは、どちらか更新されません。
DetailsViewを使用して更新を正しく実行するにはどうすればよいですか?またはObjectDataSource
をDetailsView
に正しくバインドするにはどうすればよいですか? EntityKeyがnullにならないようにするにはどうすればよいですか?あなたが変更に状態を変更してみてくださいでした
以下に示す方法を使用して、問題を解決しました。 'DataContext.ObjectStateManager.ChangeObjectState(オブジェクトエンティティ、EntityStat.Modified)'? – Eranga