avril
2011
Suite à un déploiement d’une application chez un client, j’ai eu la mauvaise surprise de constater que cette application ne fonctionnait pas dans l’environnement de production. Après un petit temps à déboguer l’application, je découvre l’erreur suivante :
The version of SQL Server in use does not support datatype ‘datetime2′.
Au niveau du code, je ne fais jamais mention de ce type « datetime2″. Cu côté de la base de données, tous mes champs utilisent le type « datetime ». Même pas les nouveaux types « date » et « time » de SQL Server 2008. Très vite, je commence à me dire que la base de données est très certainement en cause car dans mon environnement de développement, la base de données est sous SQL Server 2008, alors que dans l’environnement de mon client, la base de données est sous SQL Server 2005.
Finalement, je finis par trouver la réponse lors de recherches sur le web et le problème a bien un lien avec la base de données mais pas directement car le responsable est le modèle Entity Framework ! Lors de la création de ce modèle, le designer a pris en compte le type de serveur qui a servit à générer mon modèle et dans mon cas, c’était SQL Server 2008. Cette information est utile pour Entity Framework car cela va lui permettre d’optimiser les requêtes générées vers la base de données lors de l’exécution de l’exécution car l’utilisation du type « datetime2″ est plus performante dans le cas où le serveur SQL est en version 2008. Malheureusement ce type n’est pas reconnu sous SQL Server 2005 et Entity Framework ne changera pas de stratégie dans ce cas là.
La solution est donc dans le modèle Entity Framework.
Ouvrez votre modèle avec « Open With » et sélectionnez « XML (Text) Editor ».
<Schema Namespace="SampleModel.Store"
Alias="Self"
Provider="System.Data.SqlClient"
ProviderManifestToken="2008"
xmlns:store=http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator
xmlns=http://schemas.microsoft.com/ado/2009/02/edm/ssdl />
Vous trouverez au début de votre fichier un attribut « ProviderManifestToken » comme ci-dessus avec la valeur « 2008 ». Il vous suffit de remplacer la valeur par « 2005 » et Entity Framework génèrera à l’avenir du code à l’exécution compatible avec les bases de données SQL Server 2005.
Par contre, une mauvaise nouvelle. A chaque fois que vous mettrez à jour votre modèle, la valeur sera mise à jour en fonction de la base de données que vous utilisez.
Dommage !
1 Commentaire + Ajouter un commentaire
Déménagement
Next Microsoft CEO
Articles récents
- Changement d’adresse de ce blog
- Article : les nouveautés de C# 5.0
- Modèle Entity Framework généré avec SQL Server 2008 et utilisé sous SQL Server 2005
- Les photos, vidéos et cadeaux des TechDays 2011
- La première journée en ligne sur TechDays TV
- Suivez les TechDays 2011 comme si vous y étiez sur la chaîne TechDays TV
- Téléchargez le programme des conférence des TechDays 2011
- Dernier jour des TechDays = plus de chance de remporter des cadeaux sur le stand de dvp !
- Venez à notre rencontre lors des TechDays 2011
- Les flux à ne pas rater lors des TechDays 2011
- Les TechDays 2011 s’invite sur votre smartphone Windows Phone 7
- Exclu des cadeaux du concours Developpez.com lors des TechDays 2011
- Ouverture de la galerie d’images sur notre site des TechDays
- Partagez votre expérience des Microsoft TechDays
- Grand concours Microsoft “FAN des TechDays 2011” : épisode 2 !
- Mettez-vous aux couleurs des TechDays 2011 !
- Developpez.com aux TechDays 2011
- Le Challenge Azure 2010 est fini !
- Suivez la keynote de la pdc10 en direct sur internet à 18h !
- MVP Visual C# 2010 – 2011 !!!
J’ai eu droit au même problème, mais avec Subsonic
Je compatis, perso, ca m’a bien pris quelques heures avant de trouver :S