protected virtual void ConfigureValueConverter <TEntity>(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) where TEntity : class { if (mutableEntityType.BaseType == null && !typeof(TEntity).IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) && !typeof(TEntity).IsDefined(typeof(OwnedAttribute), true) && !mutableEntityType.IsOwned()) { if (LazyServiceProvider == null || Clock == null || !Clock.SupportsMultipleTimezone) { return; } var dateTimeValueConverter = new AbpDateTimeValueConverter(Clock); var dateTimePropertyInfos = typeof(TEntity).GetProperties() .Where(property => (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?)) && property.CanWrite && !property.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) ).ToList(); dateTimePropertyInfos.ForEach(property => { modelBuilder .Entity <TEntity>() .Property(property.Name) .HasConversion(dateTimeValueConverter); }); } }
protected void ConfigureGlobalValueConverter <TEntity>(ModelBuilder modelBuilder, IMutableEntityType entityType) where TEntity : class { if (entityType.BaseType == null && !typeof(TEntity).IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) && !typeof(TEntity).IsDefined(typeof(OwnedAttribute), true) && !entityType.IsOwned()) { var dateTimeValueConverter = new AbpDateTimeValueConverter(); var dateTimePropertyInfos = DateTimePropertyInfoHelper.GetDatePropertyInfos(typeof(TEntity)); dateTimePropertyInfos.DateTimePropertyInfos.ForEach(property => { modelBuilder .Entity <TEntity>() .Property(property.Name) .HasConversion(dateTimeValueConverter); }); } }
/// <summary> /// 把所有的时间数据按照指定的格式进行转换 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="modelBuilder"></param> /// <param name="entityType"></param> protected void ConfigureGlobalValueConverter <TEntity>(ModelBuilder modelBuilder, IMutableEntityType entityType) where TEntity : class { AbpDebug.WriteLine($"SelfType:{entityType},BaseType:{entityType.BaseType}"); //这里的BaseType,只有当前类有父类的时候,才是不空的。且还有个条件:该类必须是DbContext的DbSet属性。 if (entityType.BaseType == null && !typeof(TEntity).IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) && !typeof(TEntity).IsDefined(typeof(OwnedAttribute), true) && !entityType.IsOwned()) //OwnsOne https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities { var dateTimeValueConverter = new AbpDateTimeValueConverter(); var dateTimePropertyInfos = DateTimePropertyInfoHelper.GetDatePropertyInfos(typeof(TEntity)); dateTimePropertyInfos.DateTimePropertyInfos.ForEach(property => { modelBuilder .Entity <TEntity>() .Property(property.Name) .HasConversion(dateTimeValueConverter); }); } }