10
votes

LINQ ne peut pas effectuer d'opérations Créer, mettre à jour ou supprimer des opérations sur 'Tableau (Req)' car il n'a pas de clé primaire

Comment puis-je ajouter les lignes dans le tableau lorsque le tableau ne dispose pas de la clé primaire.


0 commentaires

7 Réponses :


2
votes

Je ne sais pas si cela est évident mais peut-être que vous pourriez peut-être définir une clé primaire. http://www.funcerx.com/vb/adonet/primarykey.htm

Voir aussi http://www.i-think22.net/archives/2009/07/24/linq-to-sql-and-tables-with-no-primary -key/


0 commentaires

16
votes

Le titre de votre question indique, LINQ to SQL ne peut pas effectuer d'opérations Créer, mettre à jour ou supprimer sur une table sans clé primaire. Ce n'est pas possible.

Donc, vous devrez peut-être utiliser DataContext.execuTecommand () Pour faire ces choses, ou mieux encore, refactorisez votre base de données afin que les tables ont des clés primaires.


0 commentaires

1
votes

Je me trompe peut-être ici, car je n'ai aucun moyen de vérifier maintenant, mais je pense que vous pouvez dire à Linq à SQL qu'un champ est une clé primaire, même si ce n'est pas en réalité une dans la base de données. Cela suppose que les données sur le terrain sont en fait uniques et peuvent être utilisées comme une clé même si elle n'est pas définie comme une.

Si la table n'a pas de clé primaire, mais contient des données uniques pouvant être utilisées comme clé, puis indiquez L2S dans la DBML que c'est la clé primaire.

Si la table ne contient pas de données uniques pouvant être utilisées comme une clé, vous devez écrire une SPROC qui supprime les données que vous souhaitez supprimer.


0 commentaires

3
votes

Si vous ne pouvez pas la définir dans la DB, définissez la clé primaire du concepteur LINQ2SQL.

S'il n'y a pas de sous-ensemble de colonnes pouvant être utilisées comme clé primaire, marquez-les tout comme partie de la clé primaire.


0 commentaires

4
votes

Permettez-moi d'illustrer avec un échantillon: xxx pré>

Le code ci-dessus donnait la même erreur lors de la tentative d'insérer une nouvelle ligne. La raison de cette question est que LINQ ne fournit pas l'installation à insérer des données dans une table sans clé primaire. À ce stade, vous avez deux options que vous pouvez utiliser pour effectuer l'opération d'insertion. P>

1.Créez une procédure de magasin et appelez-le de LINQ. P>

SampleDataContextDataContext db = new SampleDataContextDataContext();

string insertStatement = "Insert into Employee values('Experts', 'Comment','rs.emenu@gmail.com')";
db.ExecuteQuery<Employee>(insertStatement);


0 commentaires

5
votes

J'ai aussi eu le même problème. Mais j'ai résolu ce problème ...

Clé primaire 1.Seblez pour la table dans l'explorateur de serveur (vous pouvez vérifier la définition de table ouverte en cliquant avec le bouton droit de la souris sur la table)

2.Open Dataclasses.dbml sous App_code Dossier

3.Retirer la table déjà existante

4.Dragez la même table après avoir réglé à nouveau le primaire.

5.Save à tous les changements. (Le système sera invité à enregistrer les modifications au fichier .dbml -> Cliquez sur Oui)

6.Run de l'application à nouveau

Cela fonctionnera


0 commentaires

1
votes

Certaines tables (comme des tables fournies par le fournisseur) n'ont pas de clé primaire!

Chaque réponse dit "Ajouter une clé primaire".

Regardez, je ne demanderais pas si je pouvais simplement en ajouter un. Les conditions sont prédéfinies non par moi.

Y a-t-il un moyen de simplement écrire. Aucune lecture, la suppression ou la mise à jour n'est requise.


0 commentaires