public static void ShadowProperties(this ModelBuilder modelBuilder) { foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { Type type = entityType.ClrType; if (typeof(ISoftDelete).IsAssignableFrom(type)) { var method = SetSoftDeleteShadowPropertyMethodInfo.MakeGenericMethod(type); method.Invoke(modelBuilder, new object[] { modelBuilder }); } if (typeof(IAuditable).IsAssignableFrom(type)) { var method = SetAuditingShadowPropertiesMethodInfo.MakeGenericMethod(type); method.Invoke(modelBuilder, new object[] { modelBuilder }); } if (typeof(IBaseEntity).IsAssignableFrom(type)) { var method = SetBaseEntityShadowPropertiesMethodInfo.MakeGenericMethod(type); method.Invoke(modelBuilder, new object[] { modelBuilder }); } } }
/// <summary> /// Add auditing shadow property to entities that implements ISoftDelete and IFullAuditedEntity interfaces /// </summary> /// <typeparam name="TUser">Entity that represents an User</typeparam> /// <typeparam name="TKey">User primary key type</typeparam> /// <param name="modelBuilder"></param> /// <param name="entities">A list with all entities</param> public static void Auditing <TUser, TKey>(this ModelBuilder modelBuilder, List <IMutableEntityType> entities) where TUser : class { foreach (var entityType in entities) { var type = entityType.ClrType; if (typeof(ISoftDelete).IsAssignableFrom(type)) { var method = SetSoftDeleteShadowPropertyMethodInfo.MakeGenericMethod(type); method.Invoke(modelBuilder, new object[] { modelBuilder }); } if (typeof(IFullAuditedEntity).IsAssignableFrom(type)) { var method = SetFullAuditingShadowPropertyPropertyMethodInfo.MakeGenericMethod(type, typeof(TUser), typeof(TKey)); method.Invoke(modelBuilder, new object[] { modelBuilder }); } } }