2009-11-25 5 views
3

J'utilise LINQ to SQL pour les opérations de base de données, et essaie d'effectuer des opérations d'insertion dans une vue, il jette l'erreur,LINQ to SQL: Comment insérer un enregistrement dans une vue?

XXt threw exception: System.InvalidOperationException: Can't perform Create, 
Update or Delete operations on 'Table(XXX)' because it has no primary key. 

Comment utiliser LINQ pour insérer un enregistrement dans la vue en utilisant C#?

Merci.

Répondre

0

Vous ne pouvez pas insérer dans une vue. Vous ne pouvez insérer que dans une table.

Vous pouvez le faire - voir ci-dessous.

+0

incorrect, voir les réponses ci-dessous –

+0

En effet, cette réponse est erronée. Il est possible d'insérer dans les vues si vous utilisez des déclencheurs sur les tables qui composent la vue et spécifiez comment tout cela est géré. – Levitikon

-2

Je suppose que vous voulez dire qu'au lieu d'essayer d'insérer une ligne dans une vue, vous essayez d'insérer une ligne dans une table. Vous n'insérez pas de lignes dans les vues. Cela dit, L2S exige que vos tables aient des clés primaires, comme l'indique le message d'erreur. Une fois que vous créez une clé primaire et que vous mettez à jour votre fichier .DBML en conséquence, tout devrait bien se passer.

Randy

4

En fait, vous pouvez insérer dans une vue .. si la vue sous-jacente a une table, vous pouvez insérer dans celle-ci.

S'il y a plus d'une table ... alors vous pouvez utiliser à la place des déclencheurs;

J'ai également inséré un enregistrement dans une vue ... de linq à sql. (Je viens de commencer à apprendre linq moi-même).

J'ai dû créer une clé primaire sur une vue. en utilisant le concepteur, puis définissez la synchronisation automatique pour ce champ à jamais. cela devrait faire l'affaire ..

+0

d'accord. plus d'informations sous Vues modifiables ici; http://msdn.microsoft.com/en-us/library/ms187956(v=sql.90).aspx –

+0

Je dois être honnête, je commencerais probablement si je voyais quelqu'un où je travaille insérant dans une vue !! – Matt

5

Vous pouvez insérer/mettre à jour dans les vues selon les vues modifiables here. Une seule table sous-jacente peut être insérée/mise à jour ou échouera. Pour implémenter cette fonctionnalité à l'aide de LINQ, procédez comme suit;

  • Dans votre balise de fichier .dbml un (ou plusieurs) des colonnes dans la vue comme clé primaire
  • SORTE que toutes les applications dans la vue que vous attendez d'insérer/mise à jour sont simplement exposés comme un lien vers la colonne de la table de base. Exemple;
    • Les colonnes insérables/pouvant être mises à jour ne peuvent pas inclure;
      • SUM (BaseTable.ColumnName) comme NomColonne
      • ISNULL (BaseTable.ColumName, 0) comme NomColonne
      • BaseTable.ColumnName1 + '' + BaseTable.ColumnName2 comme NomColonne
    • Mais peut inclure;
      • BaseTable.ColumnName
      • BaseTable.ColumnName comme MyNewName
  • Tag l'une des colonnes qui ne sont pas direct à la mappings table de base comme la valeur générée automatiquement dans votre .dbml.

Essayez-le. J'utilise avec succès cette technique pour utiliser les vues comme seuls objets que j'utilise pour lire/insérer/mettre à jour des enregistrements.

2

Nous pouvons insérer, mettre à jour et supprimer des opérations à l'aide d'une vue dans le processus LINQ to SQL. Tout ce que nous devons nous assurer est: la vue devrait avoir une clé primaire.

Nous pouvons définir une clé primaire pour un champ dans la vue.

Ouvrez le concepteur de fichier .dbml et sélectionnez le champ que vous voulez créer en tant que clé primaire et appuyez sur F4 (fenêtre de propriétés d'ouverture).

sélectionnez true pour la propriété Clé primaire du champ sélectionné.

Maintenant, exécutez votre programme. Ça devrait marcher.

0

Auto-Sync doit être 'OnInsert' pour ce champ dans dbml.