2011-03-20 2 views
2

Je sais qu'il y a une tonne de messages sur ce problème mais aucun d'entre eux ne semble résoudre mon problème.Erreur d'infrastructure d'entité: conversion d'un type de données datetime2 en données datetime

Voici le scénario:

J'ai un CreateDateDATETIME dans ma base de données MS SQL Server utilisateur table qui est non annulable et est réglé automatiquement à l'aide GetDate() méthode dans " Valeur par défaut ou liaison ".

Je suis en mesure de créer un utilisateur très bien avec le standard EF Insérer mais lorsque je tente de mettre à jour l'utilisateur, je reçois cette erreur:

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

Quel est le truc pour ne pas avoir le souci EF au sujet la colonne CreateDate pour les mises à jour? J'ai le StoreGenerationPattern = identité mais cela n'aide pas.

Voici les propriétés EF pour mon entité Propriété: http://screencast.com/t/8ndQRn9N

Et voici ma méthode de mise à jour: http://screencast.com/t/UXIzhkhR

+0

Avez-vous VS 2010 SP1? –

+0

@Ladislav - oui – EdenMachine

Répondre

4

Avez-vous essayé de placer l'attribut StoreGeneratedPattern à « calculée ». A défaut, en dernier recours, essayez de changer le type de données de la colonne en datetime2.

[Le problème se pose parce que le .NET DateTime.MinValue égal 0001-1-1 mais Sql Server DateTime couvre 01/01/1753 par 9999-12-31]

+1

Je me rends compte que datetime2 couvre une période plus longue, mais pourquoi aurais-je besoin de plus de temps si je ne fais que définir la date de création (qui serait la date actuelle)? Le problème est qu'il continue d'essayer de mettre à jour la création à 0001-1-1 au lieu de ne pas la mettre à jour car elle est créée et créée dans la base de données lors de la création de l'enregistrement et ne devrait jamais être mise à jour. Il devrait juste laisser seul et ne pas s'inquiéter à ce sujet comme la clé de l'entité. – EdenMachine

2

Je sais que c'est une vieille question, mais peut-être ce peut aider quelqu'un:

le problème peut être un bug qui cause StoreGeneratedPattern dans la section conceptuelle (CSDL) du fichier .edmx être synchronisé avec le StoreGeneratedPattern dans la section de stockage (SSDL). La valeur par défaut GetDate() n'est jamais appelée car, sauf si vous affectez la date à partir du code côté client, la valeur par défaut DateTime.MinValue est utilisée.

La bonne nouvelle est que c'est corrigé. Recherchez KB2561001: http://archive.msdn.microsoft.com/KB2561001. Je ne sais pas si cela est corrigé dans la version ultérieure d'EF 4.3 ou si vous devez toujours appliquer le correctif.

Questions connexes