個人的には、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
: 既に属しているコンテキストによって保存されると想定されます。