1

コレクションが関連付けられているエンティティを更新しようとすると、次のメッセージが表示されます。

「同じキーを持つオブジェクトが既に ObjectStateManager に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。」

パラメータで新しいプロパティを持つエンティティを受け取ります。Eventos には Clientes のコレクションがあり、これは Eventos に付属しています。

これはコードです:

public int Modificar(Eventos eventos)
{
    try
    {
         DBEntities DB = new DBEntities();
         Eventos objEvento = 
             DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento)
                       .SingleOrDefault();

         eventos.Porcentaje_Pagado = objEvento.Porcentaje_Pagado;

         DB.Eventos.Attach(eventos);
         DB.Eventos.ApplyCurrentValues(eventos);

         DB.ObjectStateManager
             .ChangeObjectState(eventos, System.Data.EntityState.Modified);
         DB.SaveChanges();
         return eventos.Id_evento;
    }
    catch (Exception )
    {
         throw;
    }

}

問題は「添付」にあります。

何が問題ですか?

* 編集 **

部分的に機能し、「Eventos」の新しいデータを保存しましたが、Eventos に関連付けられた「Clientes」のリストを更新しようとすると、次のエラーが発生します。

「コレクションが既に EntityCollection に設定されているため、タイプ 'Eventos_...' のプロパティ 'Clientes' を設定できません。」

エラーは次のとおりです。objEvento.Clientes = eventos.Clientes;

コード:

DBEntities DB = new DBEntities(); 
Eventos objEvento = DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento).SingleOrDefault(); 
objEvento.Porcentaje_Pagado = eventos.Porcentaje_Pagado; 
objEvento.Clientes = eventos.Clientes; 
DB.SaveChanges();
4

2 に答える 2

0

次のコードを使用してエンティティを既にロードしています。

 Eventos objEvento = 
         DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento)
                   .SingleOrDefault();

オブジェクトコンテキストにロードしたエンティティを更新する必要があります。

更新objEventoしてから適用して保存します。

于 2012-06-27T19:52:47.950 に答える
0

代わりにこれを試してください:

public int Modificar(Eventos eventos) 
{ 
     DBEntities DB = new DBEntities(); 
     Eventos objEvento =  
         DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento) 
                   .SingleOrDefault(); 


     objEvento.Porcentaje_Pagado =  eventos.Porcentaje_Pagado;

     DB.SaveChanges(); 

     return objEvento.Id_evento; 

} 
于 2012-06-27T19:55:45.727 に答える