19

Estoy intentando crear una columna 'time (7)' en una tabla con Entity Framework Code First. Este es mi Entidad:Tipo SQL 'hora' en Entity Framework Code First

public class ShiftDetail 
{ 
    public long Id { get; set; } 

    [Required] 
    public int DayOfWeek { get; set; } 

    [Required] 
    [Column(TypeName="time")] 
    public DateTime StartTime { get; set; } 

    [Required] 
    [Column(TypeName = "time")] 
    public DateTime EndTime { get; set; } 

    public long ShiftId { get; set; } 
    public virtual Shift Shift { get; set; } 
} 

Como se puede ver que estoy tratando de establecer el tipo de base de datos para las columnas StartTime y EndTime a "tiempo" pero me sale este error:

(112,12) : error 2019: Member Mapping specified is not valid. The type 'Edm.DateTime[Nullable=False,DefaultValue=,Precision=]' of member 'StartTime' in type 'ShiftDetail' is not compatible with 'SqlServer.time[Nullable=False,DefaultValue=,Precision=7]' of member 'StartTime' in type 'CodeFirstDatabaseSchema.ShiftDetail'.

I' he intentado también con el nombre de tipo = "tiempo (7)", pero me sale este otro error:

(104,6) : error 0040: The Type time(7) is not qualified with a namespace or alias. Only primitive types can be used without qualification.

¿Cómo puedo crear una columna con el código de tiempo en primer lugar? (preferiblemente sin una API fluida)

Gracias de antemano.

+0

Si usa el diseñador de EDMX, ¿qué tipo de datos selecciona para su columna de tiempo? Probablemente no deberías usar 'DateTime', pero no estoy seguro de cuál es el tipo correcto, y esta es una manera fácil de averiguarlo. – hvd

Respuesta

25

Si desea utilizar Time escriba en la base de datos, tendrá que usar TimeSpan con un ciclo de 24 horas en su aplicación. DateTime no representa el tiempo.

+1

Sí señor, tienes razón. Gracias – Escobar5

+1

En realidad, cuando quiere almacenar la hora del día, hay dos buenas razones para usar DateTime en las entidades. El formateador TimeSpan de .NET 4 no admite AM/PM, y los controles de interfaz de usuario como DevExpress no se vinculan a TimeSpans por la misma razón. Lo que significa que estoy obligado a utilizar DateTime y ahora estoy buscando una forma de reconciliar EF6 con la columna 'time (0)' que quiero usar. – jnm2

+0

P.E. http://stackoverflow.com/questions/12078603/need-to-format-timespan-ado-net-datacolumn-as-am-pm – jnm2

Cuestiones relacionadas