コンテキストを作成した後、MergeOption をすべての EntitySet に設定できます。このようないくつか:
var objSetProps = ctx.GetType().GetProperties().Where(prop => prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(ObjectSet<>));
foreach (PropertyInfo objSetProp in objSetProps)
{
ObjectQuery objSet = (ObjectQuery)objSetProp.GetValue(ctx, BindingFlags.GetProperty, null, null, null);
objSet.MergeOption = MergeOption.PreserveChanges;
}
ここで MergeOption について読んでください: http://msdn.microsoft.com/en-us/library/system.data.objects.mergeoption.aspx
NoTracking を使用すると思います。
ただし、「キャッシュされた」エンティティをクリアして、切り離したい場合があります。
var entidades = Ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged);
foreach (var objectStateEntry in entidades)
Ctx.Detach(objectStateEntry.Entity);
Ctx は私のコンテキストです。