Entity Framework 7 Establecer precisión decimal para el constructor de modelos

entity-framework-core

Pregunta

He estado tratando de averiguar cómo configurar la precisión decimal para EF7 (Beta 4) sin suerte.

Esperaba hacer algo como:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

Esto no parece estar disponible, pero pude encontrar la siguiente clase en el repositorio en GitHub:

https://github.com/aspnet/EntityFramework/blob/7.0.0-beta4/src/EntityFramework.Relational/RelationalDecimalTypeMapping.cs

No hay ejemplos de cómo usar las clases RelationalTypeMapping o las firmas de métodos con ellos. ¿Quizás esto solo se usa como parte de la API de mapeo para recuperar información?

Otro lugar donde podría esperar que sea este es el siguiente:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

o

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

Esto solo requiere una cadena, ¿esta funcionalidad aún no está implementada o simplemente no estoy buscando en el lugar correcto?

Edición: Me di cuenta de que la cadena es probablemente para el tipo de solución .ColumnType ("decimal (10,6)") hasta que se desarrolle aún más, pero no me importaría obtener una aclaración, ya que preferiría no usar cadenas para esto.

Edición: después de la aclaración de Bricelam, terminé creando la siguiente extensión para usar por ahora para evitar el uso de la cuerda, y aprecio la simplicidad de su enfoque:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

Ejemplo de uso:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

Edit: Haciendo modificación para RC1

Todavía no he probado esto, pero acabo de juntar las siguientes 2 muestras de lo que probablemente se verá con RC1

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

Como todavía no lo he probado, no estoy seguro de cuál sería el uso correcto entre "HasColumnType" o "ForSqlServerHasColumnType", pero espero que esto apunte a alguien en la dirección correcta.

Respuesta aceptada

Su solución es el diseño que pretendemos. En lugar de tener un montón de "facetas", puede establecer un tipo como precisión, escala, longitud máxima, Unicode / ansi, longitud fija / variable, etc. Decidimos mantenerlo simple: si la asignación de tipos predeterminada no es lo que Si quieres, dinos que tipo de uso. Se ha hablado de volver sobre esta decisión y reintroducir las "facetas". Si te parece bien, te animo a crear un nuevo problema .

También tenga en cuenta que hay un montón de otros errores en el mapeo de tipo en este momento, pero deberían solucionarse en el momento en que lanzemos la versión beta5.


Respuesta popular

El ejemplo que se muestra parece estar desactualizado según EF RC1.

Así es como configuro la precisión en un campo decimal.

Di que tengo una entidad

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

luego, en mi clase de contexto, sobre la creación de modelos, hago una instancia de la asignación (podría hacer la asignación allí, pero me gusta mantenerla separada)

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

y luego el mapeo. Recuerde usar el espacio de nombres donde están las extensiones de modelo:

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué