Entity Framework - valeurs par défaut n'est pas défini dans la table sql server
SQL server 2005 de la base de données de la table a une colonne "createdon", pour lequel la valeur par défaut définie pour la fonction getdate(). Je suis en train d'ajouter un enregistrement à l'aide de entity framework. 'createdon colonne n'est pas mis à jour.
Ai-je raté un bien dans le cadre de l'Entité, s'il vous plaît suggérer.
OriginalL'auteur Chris_web | 2013-07-15
Vous devez vous connecter pour publier un commentaire.
C'est l'une des rares questions qui posent des problèmes avec Entity Framework. Disons que vous avez une classe qui ressemble à ceci:
Maintenant, vous voulez insérer un nouvel élément:
Entity Framework sait comment gérer une incrémentation automatique de la clé primaire en raison de la définition de l'EDMX. Il ne va pas essayer d'insérer une valeur pour le
Id
de la propriété. Cependant, dans la mesure Entity Framework est concerné,CreatedOn
a une valeur: la valeur par défautDateTime
. Parce que Entity Framework ne peut pas dire "eh bien, il a une valeur, mais je l'ignore", il cherchera activement à insérer le disque avecCreatedOn
la valeur de la propriété, en contournant la valeur par défaut sur votre définition de la colonne sur votre table.Il n'y a pas de moyen facile de le faire. Vous pouvez soit activement définir la
CreatedOn
propriétéDateTime.Now
lorsque vous insérez un objet. Ou vous pouvez créer une interface et une méthode d'extension de la paire:Edit: De s'étendre sur ce point, la raison pour laquelle c'est une question encore sans réponse est à cause de la signification derrière un
autoincrement
champ et un champ avec undefault
valeur de contrainte. Un auto-incrément champ doit, par définition, toujours être gérer par le serveur, à l'aide d'une graine et tout ce jazz. Vous ne pouvez pas spécifier une valeur pour un champ à incrémentation automatique sur un insert sauf vous avez utiliséSET IDENTITY INSERT ON
. Une valeur par défaut, cependant, est juste un conseil que de dire "si je ne spécifiez aucune valeur, utiliser ce". Parce que les types de valeur .NET ne peut pas être nulle, il y aura toujours une valeur et Entity Framework ne peut pas en déduire que les par défaut de valeur pour ce champ, à l'époque, signifie que vous voulez qu'il soit réglé par défaut sur le serveur SQL.Autant que je sache, oui. C'est aussi un problème avec le
Guid
clés primaires dans le Cadre de l'Entité. Ou de contourner Cadre de l'Entité complètement et insérer la valeur avec vos propres SQL. Voir mon edit pour plus d'informations sur les raisons de ce qui se passe.Le "problème" n'est pas EF, mais .Net. Une structure comme Datetime, int, Guid etc. toujours a une valeur par défaut (dans le cas d'un int, il est à 0, même lorsque vous n'avez pas l'affecter, et en cas de Datetime il est par défaut(DateTime) qui se trouve être le type DateTime.Min). Vous pourriez essayer d'ajouter un peu de logique pour le getter de la Propriété, et de vérifier si c'est la valeur par défaut de type Datetime et revenir un autre, mais il pourrait ne pas fonctionner si elle ne déclenche pas EF Changetracking (depuis EF met uniquement à jour les valeurs qui ont changé depuis le chargement).
href="https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/2929682-support-database-default-values-in-code-first" >Pertinentes suggestion, FWIW.
OriginalL'auteur Simon Belanger
Vous pouvez définir
StoreGeneratedPattern
àComputed
(comme Malcolm suggéré) dans l'interface graphique du modèle de données d'entité.F4 ou clic droit->propriétés)
StoreGeneratedPattern
àComputed
dans la fenêtre propriétéscomme indiqué ci-dessous:
OriginalL'auteur Tony L.
Suivant à l'aide de la designer et un peu plus de chouettes trucs montré déjà, vous pouvez aussi marquer les colonnes comme étant calculée par simple réglage de la
DatabaseGenerated
attribut sur le terrain:OriginalL'auteur Patrick Hofman
J'ai autour de cette question en disant EF que la colonne est "calculée", et devrait donc être laissé seul pour les insertions.
Si vous regarder dans la configuration de l'généré entité
OriginalL'auteur Malcolm Swaine