2010-04-12 6 views
0

Je reçois cette erreur lors de l'utilisation de linq-to-sql avec timestamp dans le cadre d'une clé primaire composite:Horodatage en tant que partie de la clé primaire composite?

"La colonne de clé primaire de type 'Timestamp' ne peut pas être générée par le serveur."

Je suppose que cela peut être dû au fait que l'horodatage est juste une version de ligne donc peut-être qu'il doit être créé après l'insertion? Ou ...

Répondre

0

Vous pouvez travailler autour d'elle .. mettre

  • généré automatiquement la valeur True
  • Auto-Sync pour OnInsert

+0

@gbn Merci. Cela peut fonctionner mais je ne l'utiliserai probablement pas dans le PK car je ne veux pas modifier le DBML. –

5

n'utilisez pas le type de données d'horodatage !!

La syntaxe d'horodatage est obsolète. Cette fonctionnalité sera supprimée dans une version future de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans le nouveau travail de développement , et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

horodatage (Transact-SQL)http://msdn.microsoft.com/en-us/library/ms182776(SQL.90).aspx rowversion (Transact-SQL)http://msdn.microsoft.com/en-us/library/ms182776.aspx

En outre, si elle principalement conçu pour changer, de garder une trace des versions, pourquoi en faire une partie de une clé primaire? changer une clé primaire peut causer beaucoup de problèmes!

Si vous avez besoin d'un système valeur générée pour une clé primaire, utilisez une identité ou guid.

IDENTITÉ (Propriété)http://msdn.microsoft.com/en-us/library/aa933196(SQL.80).aspx
GUID uniqueidentifierhttp://msdn.microsoft.com/en-us/library/aa260656(v=SQL.80).aspx

+0

@KM Merci pour les informations mais linq-to-sql ne nécessite pas d'horodatage pour une concurrence optimiste pour les objets détachés? La principale raison pour laquelle je fais cela est que je n'ai vraiment pas besoin d'une clé primaire pour cette table ou plutôt je me fiche de savoir s'il y a des entrées en double à condition que tous les champs ne soient pas dupliqués. Fondamentalement, je l'utilise comme un stockage de jeton pour une récupération de mot de passe et l'utilisateur peut demander un mot de passe plusieurs fois. Je stocke simplement un nouveau jeton dans la table par rapport à parce que je ne veux pas vérifier s'il existe déjà. –

+0

@KM Aussi rowversion n'est pas une option dans Visual Studio 2008. –

+0

essayez de faire le PK une identité et l'horodatage juste une colonne, comme dans cet exemple: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008 /07/01/10557.aspx voir ce lien sur rowversion http://thedatafarm.com/blog/data-access/if-timestamp-is-deprecated-why-do-none-of-the-current-db-tools -support-rowversion/ –

Questions connexes