Это то, что я использую, чтобы получить то, что я хочу. Для моей цели это прекрасно работает:
foreach (var metric in metrics)
{
var added = context.Set(metric.GetType()).Add(metric);
foreach (var dbEntityEntry in context.ChangeTracker.Entries())
{
//If these entities exist, don't add them.
var metricContext = dbEntityEntry.Entity as MetricContext;
if (metricContext != null)
{
var found = context.MetricContext.FirstOrDefault(c => c.Context == metricContext.Context);
if (found != default(MetricContext))
{
dbEntityEntry.State = EntityState.Detached;
}
}
}
}
Это отсоединяет любые сущности, которые уже живут в БД, что означает, что они не будут обработаны.