1

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を使用して更新を正しく実行するにはどうすればよいですか?またはObjectDataSourceDetailsViewに正しくバインドするにはどうすればよいですか? EntityKeyがnullにならないようにするにはどうすればよいですか?あなたが変更に状態を変更してみてくださいでした

+0

以下に示す方法を使用して、問題を解決しました。 'DataContext.ObjectStateManager.ChangeObjectState(オブジェクトエンティティ、EntityStat.Modified)'? – Eranga

答えて

1

public void Update<TEntity>(TEntity entity) where TEntity : class 
{ 
    object originalItem; 

    EntityKey key = DataContext.CreateEntityKey(GetEntityName<TEntity>(), entity); 

    if (DataContext.TryGetObjectByKey(key, out originalItem)) 
    { 
     DataContext.ApplyCurrentValues(key.EntitySetName, entity);     
    } 

    SaveChanges(); 
} 
関連する問題