0

私のコードには、次のようなコード行がいくつかあります。

Insertions["sale"] = (modelEntities, entity) => modelEntities.AddToSale((Sale) entity);

データベースにそのようなエンティティがない場合は正常に機能します。しかし、エンティティが既にデータベースにあるときにエンティティを更新したい。Findメソッドとフィールドの割り当てを介して行うことができますが、かなりのコードを保持し、コンストラクターまたはInsert-or-Update.

これどうやってするの?

4

1 に答える 1

1

個人的には、add/insert メソッド デリゲートを使用して辞書を作成するのは無意味だと思います。繰り返しの多いコードです。コンテキストには、エンティティ オブジェクトを挿入または更新するための一般的なメソッドがあります。たとえば、両方を行う 1 つのメソッドを作成することもできます (に基づくObjectContext):

public static void Upsert<T>(this ObjectContext context, T entity, int key)
  where T : EntityObject
{
  if (entity != null)
  {
    ObjectSet<T> objectSet = context.CreateObjectSet<T>();
    if (key > 0)
    {
      if (entity.EntityState == EntityState.Detached)
      {
        objectSet.Attach(entity);
        context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
      }
    }
    else
    {
      objectSet.AddObject(entity);
    }
  }
}

key必要に応じて、EF モデルからキー フィールドを取得し、 でいくつかのリフレクションを行うことで、引数を除外することもできますentityが、おそらくプロセスが著しく遅くなります。

永続化されたオブジェクトは、このメソッドによって無視されることに注意してくださいAttached: 既に属しているコンテキストによって保存されると想定されます。

于 2012-11-10T13:27:24.323 に答える