2011-10-24 17 views
0

私はADO.NET EF 4.0を使用しています。まず、DBからオブジェクトを取得し、このオブジェクトをデタッチし、クライアント側のWebサービスから送信します。ADO.NET Entity Framework 4.0でDBを更新

Webサービス:クライアント側で

private static Project GetObjects(int id) 
    { 
     var connSetting = ConfigurationManager.ConnectionStrings["ProjectEntities"]; 
     var conn = new EntityConnection(connSetting.ConnectionString); 
     conn.Open(); 

     using(var contex= new ProjectEntities(conn)) 
     { 
      var project = (from p in contex.Projects 
          where p.ProjectId == id 
          select p).FirstOrDefault(); 

      contex.Detach(project); 

      return project; 
     } 
    } 

は、このオブジェクトが、私はこのオブジェクトDBを更新する必要があるWebサービス側では、バックWebサービスに送信され編集されています。

今、私はこれを使用します。

private static void UpdateObject(Project obj) 
    { 
     var connSetting = ConfigurationManager.ConnectionStrings["ProjectEntities"]; 
     var conn = new EntityConnection(connSetting.ConnectionString); 
     conn.Open(); 

     using (var contex = new ProjectEntities(conn)) 
     { 
      var entity = (Project)contex.GetObjectByKey(obj.EntityKey); 
      contex.ApplyCurrentValues(entity.EntityKey.EntitySetName, obj); 
      contex.SaveChanges(); 
     } 

    } 

更新するこの方法はokですか?最初にオブジェクトcontexからオブジェクトを取得しなければならないので、私は更新することができます。

あなたの提案。あなたの助けとアドバイスありがとうございます

+0

なぜ手動で接続を開いているのか分かりません.ConnectionStringを 'Context'に渡して、必要に応じてデータベース接続を開いて閉じることができるようにするのは不必要な作業のようです。 (正確にはあなたが探していたものではありませんが、それ以外の理由がある場合は、何かを学ぶかもしれません)。 –

答えて

1

私たちは次のようにします: context.TableName.Attach(object); context.ObjectStateManager.ChangeObjectState(Object、System.Data.EntityState.Modified); context.SaveChanges();

EntityState.ModifiedをEntityStateに変更することができます.Addedを使用して新しいアイテムを追加するか、またはDeletedを削除して既存のアイテムを削除します。

関連する問題