public static void ShadowProperties(this ModelBuilder modelBuilder)
        {
            foreach (var tp in modelBuilder.Model.GetEntityTypes())
            {
                var t = tp.ClrType;

                // set auditing properties
                if (typeof(IAuditable).IsAssignableFrom(t))
                {
                    var method = SetAuditingShadowPropertiesMethodInfo.MakeGenericMethod(t);
                    method.Invoke(modelBuilder, new object[] { modelBuilder });
                }

                // set tenant properties
                if (typeof(ITenant).IsAssignableFrom(t))
                {
                    var method = SetTenantShadowPropertyMethodInfo.MakeGenericMethod(t);
                    method.Invoke(modelBuilder, new object[] { modelBuilder });
                }

                // set soft delete property
                if (typeof(ISoftDelete).IsAssignableFrom(t))
                {
                    var method = SetIsDeletedShadowPropertyMethodInfo.MakeGenericMethod(t);
                    method.Invoke(modelBuilder, new object[] { modelBuilder });
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Add TenantId shadow property to entities that implements IHaveTenant and IMayHaveTenant interfaces
        /// </summary>
        /// <param name="modelBuilder"></param>
        /// <typeparam name="TEntity">Tenant entity</typeparam>
        /// <param name="entitiesList">A list with all entities</param>
        public static void MultiTenancy <TEntity>(this ModelBuilder modelBuilder, List <IMutableEntityType> entitiesList) where TEntity : class
        {
            foreach (var entityType in entitiesList)
            {
                var type = entityType.ClrType;

                if (typeof(IHaveTenant).IsAssignableFrom(type))
                {
                    var method = SetTenantShadowPropertyMethodInfo.MakeGenericMethod(type, typeof(TEntity));
                    method.Invoke(modelBuilder, new object[] { modelBuilder });
                }

                if (typeof(IMayHaveTenant).IsAssignableFrom(type))
                {
                    var method = SetNullableTenantShadowPropertyMethodInfo.MakeGenericMethod(type, typeof(TEntity));
                    method.Invoke(modelBuilder, new object[] { modelBuilder });
                }
            }
        }