2008-12-11 10 views
5

Je viens de commencer à utiliser linq to sql et j'ai rencontré un problème avec l'insertion d'un enregistrement avec un champ auto-incrémenté.Erreur Linq to sql avec champ d'incrément d'identité

J'ai créé une nouvelle instance d'un objet de société défini par linq. il a initialisé un champ auto-incrémenté 'companyID' à 0. InsertOnSubmit() échoue avec l'exception invalidOperationException suivante.

spécification Autosync incorrect pour membre 'CompanyID'

l'attribut de colonne IsDbGenerated est vrai pour la propriété CompanyID. J'utilise sql server 2000.

Editer: La synchronisation automatique est définie sur OnIsert. Le dataype est BigInt dans TSQL, long dans C#.

Est-ce que quelqu'un sait pourquoi cette erreur se produit et comment elle peut être résolue?

grâce

Répondre

9

trouvé la réponse. C'était à faire avec les clés primaires. Dans le concepteur linq, les clés primaires étaient configurées comme elles devraient l'être. Dans la base de données, les champs pertinents n'étaient pas définis en tant que clés primaires. J'ai réparé les clés dans la base de données et cela a résolu le problème.

+1

Il semble que vous ayez modifié le fichier L2S manuellement. Je recommande de toujours laisser le fichier être généré à partir de votre base de données automatiquement (en utilisant sql metal ou le concepteur). L'éditer directement permet aux incohérences d'apparaître, comme vous le voyez ici. – jeremcc

1

Quelle est la valeur de la propriété 'Auto-Sync' sur cette classe/table?

Je viens de vérifier de mon côté, et il est réglé sur 'OnInsert'. La valeur "Auto Generated Value" est également définie sur true.

3

Quel est le type de données? int? (int TSQL et en C#?)

Quel paramètre de synchronisation automatique avez-vous? Pour une clé primaire, elle doit être "OnInsert"

2

Même numéro. Réglage de la clé primaire dans la DB et la modification des biens AutoSync à "OnInsert" sur DBML aidé

1

sur l'option d'insertion est définie uniquement lorsque vous insérez des valeurs dans la base de données. Si vous n'avez aucun problème avec l'option de sécurité avec base de données, utilisez toujours l'option Jamais dans la base de données.

0

Si cela est possible, déposez votre base de données et recréer. Mon cas était quand j'ai oublié d'ajouter la clé primaire sur la table. Ensuite, après la première insertion est entré dans la base de données, je me suis excité sur la clé primaire manquante. J'ai appliqué cela manuellement dans le concepteur dbml, mais le premier ID a déjà été pris qui a provoqué l'exception 'Incorrect autosync'.