public static ModelBuilder ApplyValueObjectConfiguration(this ModelBuilder builder, Action <ValueObjectConfigurationOptions> configureOptions) { Ensure.NotNull(builder, nameof(builder)); var options = new ValueObjectConfigurationOptions(); configureOptions?.Invoke(options); foreach (var entityType in builder.GetEntityTypes(typeof(ValueObject <>))) { if (options.Configure != null) { builder.Entity(entityType.ClrType, entityTypeBuilder => { options.Configure.Invoke(entityType, entityTypeBuilder); }); } if (options.ScalarPropertyNameFactory != null) { foreach (var prop in entityType.GetProperties()) { prop.SetColumnName(options.ScalarPropertyNameFactory(entityType, prop)); } } } return(builder); }
public static DbModelBuilder ApplyValueObjectConfiguration(this DbModelBuilder builder, Action <ValueObjectConfigurationOptions> configureOptions) { Ensure.NotNull(builder, nameof(builder)); var options = new ValueObjectConfigurationOptions(); configureOptions?.Invoke(options); builder.Types().Where(x => typeof(ValueObject <>).IsAssignableFromGenericType(x)).Configure(x => { if (options.Configure != null) { options.Configure.Invoke(x); } if (options.ScalarPropertyNameFactory != null) { var props = x.ClrType.GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(p => (!p.PropertyType.IsClass || p.PropertyType == typeof(String)) && !p.PropertyType.IsInterface); foreach (var prop in x.ClrType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { x.Property(prop).HasColumnName(options.ScalarPropertyNameFactory(x, prop)); } } }); return(builder); }