示例#1
0
        /// <summary>
        ///   Determines whether or not the type is an entity that should be mapped.
        /// </summary>
        /// <param name="type"> </param>
        /// <param name="declared"> </param>
        /// <returns> </returns>
        protected virtual bool IsEntity(Type type, bool declared)
        {
            if (type == EntityBaseType || type.IsInterface ||
                type.ImplementsInterfaceDirectly(typeof(IEntityBase)))
            {
                return(false);
            }

            return(EntityBaseType.IsAssignableFrom(type));
        }
        public static ModelBuilder ApplyGlobalStandards(this ModelBuilder builder)
        {
            foreach (var EntityBaseType in builder.Model.GetEntityTypes())
            {
                EntityBaseType.GetForeignKeys()
                .Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade).ToList()
                .ForEach(fe => fe.DeleteBehavior = DeleteBehavior.Restrict);

                foreach (var property in EntityBaseType.GetProperties())
                {
                    switch (property.Name)
                    {
                    case nameof(EntityBase.Id):
                        property.IsKey();
                        break;

                    case nameof(EntityBase.ModifiedDate):
                        property.IsNullable = true;
                        break;

                    case nameof(EntityBase.CreatedDate):
                        property.IsNullable = false;
                        property.SetDefaultValueSql("GETDATE()");
                        break;

                    case nameof(EntityBase.IsDeleted):
                        property.IsNullable = false;
                        property.SetDefaultValue(false);
                        break;
                    }

                    if (property.ClrType == typeof(string) && string.IsNullOrEmpty(property.GetColumnType()))
                    {
                        property.SetColumnType($"varchar({property.GetMaxLength() ?? 100})");
                    }

                    if (property.ClrType == typeof(DateTime) || property.ClrType == typeof(DateTime?))
                    {
                        property.SetColumnType("datetime");
                    }
                }
            }

            return(builder);
        }