Entity Framework TimeSpan – Erreur de temps

J’utilise EF 5 et c #.

Dans mon projet principal, j’utilise CodeFirst pour créer ma firebase database. Là j’ai cette entité:

public class Shift { public ssortingng Name { get; set; } public TimeSpan StartTime { get; set; } public TimeSpan EndTime { get; set; } } 

Les propriétés de TimeSpan sont créées en tant que time (7) et non null dans la firebase database.

Dans mon projet principal, tout fonctionne correctement.

Mais lors de l’access à la firebase database à partir d’un projet de service Windows (j’utilise les mêmes contextes et modèles du projet principal) dans la même solution, j’obtiens cette erreur:

Cette ligne (plusieurs fois utilisées dans le projet principal):

 context.Shifts.Load(); 

résulte en

 There is no store type corresponding to the conceptual side type 'Edm.Time(Nullable=True,DefaultValue=,Precision=)' of primitive type 'Time'. 

Quelle est la cause de ce problème?

//modifier

La chose amusante est notre projet principal a créé la colonne de temps sans notre hélicoptère.

J’ai remplacé le fichier App.Config du Service par la configuration de notre projet principal et cela fonctionne maintenant?

Je me demande encore pourquoi c’est difficile …

     

Votre problème peut être expliqué par votre version de SqlServer.

Entity Framework 5 prend en charge TimeSpan . Il utilise le time comme type de support SQL. La prise en charge du type d’ time commencé avec SqlServer 2008. Est-il possible que vous soyez passé d’une instance SqlServer 2005 à 08 ou plus récent? Cela aurait pour résultat que tout fonctionnerait comme vous l’avez expérimenté.

Il est à noter que l’utilisation de TimeSpan avec EF peut être problématique, car le type de sauvegarde time(7) tiendra uniquement une durée inférieure à 24h. Par conséquent, il est courant d’utiliser la solution de contournement mentionnée par floAr.

Entity Framework version 5 ne mappe pas timepan. Mais vous pouvez utiliser une solution de contournement pour l’utiliser quand même.

Stockez simplement le timespan comme TimeSpan pour la manipulation et comme un Int64 pour le mappage

 public Int64 TimeSpanTicks{ get; set; } [NotMapped] public TimeSpan TimeSpanValue { get { return TimeSpan.FromTicks(TimeSpanTicks); } set { TimeSpanTicks= value.Ticks; } }