Comment utiliser l'Entity Framework par défaut et les valeurs de date par défaut
Dans ma base de données SQL Server schéma j'ai un tableau de données avec un champ date qui contient une valeur par défaut de
CONVERT(VARCHAR(10), GETDATE(), 111)
qui est idéal pour insérer automatiquement la date du jour dans le nouveau record lors de la saisie manuelle des enregistrements dans la base de données.
Le problème que j'ai, c'est que lors de l'utilisation d'Entity Framework et de la cartographie du champ de Date, que l'Entité Cadre insère une valeur par défaut de type DateTime.Min lorsque l'entité est instancié.
Je ne peut pas mapper le champ de la Date à nullable DateTime, c'est à dire DateTime?, je ne suis pas en mesure d'utiliser CONVERTIR ou DateTime.Maintenant.Aujourd'hui, la valeur par défaut de l'Entité de Designer comme il n'accepte que les codée en dur des valeurs constantes.
Je suis bien sûr de définir explicitement le champ DateTime dans C# à chaque fois que l'objet est créé, soit de manière explicite dans le code, dans le constructeur d'une classe partielle, ou même pendant l'enregistrement des modifications de l'événement.
Existe-il d'autres façons de réaliser ce que je veux où le défaut de calcul de la valeur stockée dans la table de base de données est en fait utilisé à la place?
source d'informationauteur Justin
Vous devez vous connecter pour publier un commentaire.
Je viens de tomber sur cette - j'ai travaillé autour de lui par le réglage de la date (le champ j'avais besoin généré automatiquement) dans le constructeur de l'Entité à l'aide d'une partielle de la méthode. Si c'est l'Idéal ou si elle fonctionne dans tous les cas est encore à voir, mais il a résolu mon problème jusqu'à présent.
Créer une classe partielle pour votre EntityObject, ajouter un constructeur par défaut, et de définir des valeurs par défaut.
Vous pouvez utiliser un déclencheur de base de donnéesqui, à l'insertion, il vérifie si la valeur insérée est de type DateTime.MinValue (01.01.0001) et la remplace par la valeur que vous désirez. Cette Article MSDN décrit comment créer un déclencheur.
Un petit "défaut": avec cette solution, vous devez stocker le nouvel objet à la base de données et le lire par la suite pour mettre à jour votre objet avec la valeur calculée.
Ce qui est vraiment dommage. Les réponses de référencement
StoreGeneratedPattern
ne sont pas une vraie solution, qui ne permet pas toujours de définir la valeur.Toute l'équipe reste à faire est quelque chose comme ceci:
Si un champ est marqué DefaultValue, puis à EF SQL du temps de génération, les propriétés avec cet attribut vérifier si
field == default(DateTime)
si oui, alors tout simplement omettre que la colonne du code généré.J'ai eu un problème similaire, à l'aide des Services de RIA avec Entity Framework. Je n'étais pas en mesure de définir la valeur dans le constructeur par défaut sur le côté client, parce que les classes d'entités qui sont générés il y a déjà un vide de constructeur par défaut.
La solution que j'ai utilisé était de mettre en œuvre la OnCreated partielle de la méthode de l'entité sur le client par le réglage de la nécessaire valeur par défaut.
Le champ de la date peut être mappé à DateTime? seulement si la colonne est de prendre la valeur null dans la base de données.
Je pense que la réponse fournie par lazyberezovsky sur un autre DONC, la question est le droit avant la solution de ce problème Entity Framework et de la Date par Défaut
Venait d'arriver à la croix par ce problème. Entity Framework ne prennent pas en charge les valeurs par défaut sur son propre. Vous devez définir la propriété StoreGeneratedPattern = Calculées sur la colonne dans le fichier Edmx entité. La valeur par défaut que vous définissez dans la Base de données de priorité sur ce que EF définit par défaut c'est à dire de type DateTime.Min