2017-05-23 4 views
0

Wie kommt es, dass alle meine Suchanfragen mit Dapper einen leeren (default Datetime-Wert) für dieses Workoutdatum-Feld bringen?Dapper bringt Datetime-Feld als Standardwert

StringBuilder query = new StringBuilder(); 

query.Append("SELECT W.WorkoutId, W.Active, W.GymId, W.Spots, W.UserId, W.WorkoutDate, W.WorkoutStatusId FROM [Workout] W"); 

    public class Workout 
    { 
     public Guid WorkoutId { get; private set; } 
     public Guid UserId { get; set; } 
     public Guid? GymId { get; set; } 
     public int WorkoutStatusId { get; set; } 
     public int Spots { get; set; } 
     public bool Active { get; set; } 
     public DateTime WorkoutDate { get; set; } 
    } 
+2

Ist 'WorkoutDate' tatsächlich eine Spalte vom Typ 'datetime'? Wenn es sich beispielsweise um einen 'nvarchar' handelt, ist das Casting nach datetime möglicherweise nicht erfolgreich. Wenn Sie uns die Tabellendefinition und die aktuelle Dapper-Abfrage zur Verfügung stellen könnten, die Ihnen helfen würden. – pcdev

+0

@pcdev der Tabellendefinition: TABLE [dbo] CREATE [Training] ( \t [WorkoutId] [unique] NOT NULL, \t [Aktiv] [Bit] NOT NULL, \t [GymId] [unique] NULL. \t [Spots] [int] NOT NULL, \t [Benutzer-ID] [UNIQUE] NOT NULL, \t [WorkoutDate] [datetime2] (7) NOT NULL, \t [WorkoutStatusId] [int] NOT NULL, –

+0

und In-class-Feld: public DateTime WorkoutDate {get; set;} –

Antwort

1

Ihre Spalte ist ein datetime2. Sie können die Dapper Weise Spalten wie diese Karten ändern:

SqlMapper.AddTypeMap(typeof(DateTime), System.Data.DbType.DateTime2); 

Eine Alternative ist es in der Auswahl so zu werfen:

SELECT CAST(W.WorkoutDate AS datetime) ... 

Oder Sie könnten Ihre Spalte in Datetime ändern, wenn Sie don‘ t brauchen die zusätzliche Genauigkeit von datetime2.

+0

versuchte beide Strategien und beide funktionierten nicht = ( –