public static void Evict <TEntity>(this DbContext context, params object[] keyValues) where TEntity : class { //https://weblogs.asp.net/ricardoperes/implementing-missing-features-in-entity-framework-core var tracker = context.ChangeTracker; var entries = tracker.Entries <TEntity>(); if (keyValues.Any() == true) { var entityType = context.FindEntityType <TEntity>(); var keys = entityType.GetKeys(); var i = 0; foreach (var property in keys.SelectMany(x => x.Properties)) { var keyValue = keyValues[i]; entries = entries.Where(e => keyValue.Equals(e.Property(property.Name).CurrentValue)); i++; } } foreach (var entry in entries.ToList()) { entry.State = EntityState.Detached; } }
public static IKey FindPrimaryKey <T>(this DbContext dbContext, T entity) => dbContext.FindEntityType <T>().FindPrimaryKey();