Nuestro team especializado despúes de varios días de investigación y recopilación de de información, han obtenido los datos necesarios, queremos que te resulte útil para tu trabajo.
Solución:
los DataType
El atributo es un atributo de validación. Necesitas hacer eso usando el ModelBuilder.
public class MyContext : DbContext
public DbSet MyClass;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.Entity().Property(x => x.SnachCount).HasPrecision(16, 3);
modelBuilder.Entity().Property(x => x.MinimumStock).HasPrecision(16, 3);
modelBuilder.Entity().Property(x => x.MaximumStock).HasPrecision(16, 3);
Puede modificar todas las propiedades decimales en la base de datos. En su DBContext en el método OnModelCreating, agregue la línea:
modelBuilder.Properties().Configure(c => c.HasPrecision(18, 3));
Esto se copia de la respuesta que publiqué a la misma pregunta aquí; https://stackoverflow.com/a/15386883/1186032.
Pasé un buen rato creando un atributo personalizado para esto:
[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
public sealed class DecimalPrecisionAttribute : Attribute
public DecimalPrecisionAttribute(byte precision, byte scale)
Precision = precision;
Scale = scale;
public byte Precision get; set;
public byte Scale get; set;
usándolo así
[DecimalPrecision(20,10)]
public Nullable DeliveryPrice get; set;
y la magia sucede en la creación del modelo con algo de reflexión
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
foreach (Type classType in from t in Assembly.GetAssembly(typeof(DecimalPrecisionAttribute)).GetTypes()
where t.IsClass && t.Namespace == "YOURMODELNAMESPACE"
select t)
foreach (var propAttr in classType.GetProperties(BindingFlags.Public
la primera parte es obtener todas las clases en el modelo (mi costumbre attribute se define en ese ensamblaje, así que lo usé para obtener el ensamblaje con el modelo)
el segundo foreach obtiene todas las propiedades en esa clase con la costumbre attributey el attribute en sí mismo para que pueda obtener los datos de precisión y escala
después de eso tengo que llamar
modelBuilder.Entity().Property(c=> c.PROPERTY_NAME).HasPrecision(PRECITION,SCALE);
así que llamo al modelBuilder.Entity() por reflexión y lo almaceno en la variable entityConfig, luego construyo la expresión lambda “c => c.PROPERTY_NAME”
Después de eso, si el decimal es anulable, llamo al
Property(Expression> propertyExpression)
método (lo llamo por la posición en el arrayno es ideal, lo sé, cualquier ayuda será muy apreciada)
y si no es anulable, llamo al
Property(Expression> propertyExpression)
método.
Teniendo DecimalPropertyConfiguration, llamo al método HasPrecision.
Más adelante puedes encontrar las interpretaciones de otros desarrolladores, tú aún eres capaz mostrar el tuyo si lo crees conveniente.