Linq insérer avec aucune clé primaire
J'ai besoin d'insérer des enregistrements dans une table qui n'a pas de clé primaire à l'aide de LINQ to SQL. La table est mal conçue, je n'ai AUCUN contrôle sur la structure de la table. La table est composée de quelques champs varchar, un champ de texte, et un horodatage. Il est utilisé comme une piste de vérification pour les autres entités.
Quelle est la meilleure façon d'accomplir les inserts? Puis-je augmenter le Linq classe partielle de ce tableau et ajouter un "faux" clé? Je suis ouvert à tout hack, cependant kludgey.
Vous devez vous connecter pour publier un commentaire.
LINQ to SQL n'est pas conçue pour cette tâche, donc ne l'utilisez pas. Juste de la courbure de l'insérer dans une procédure stockée et ajouter la procédure à votre modèle de données. Si vous ne pouvez pas le faire, écrire une fonction normale avec un peu de ligne de SQL.
Ouvrir votre fichier DBML dans le concepteur, et de donner le mappage d'une clé, si votre base de données a un ou pas. Cela permettra de résoudre votre problème. Juste attention, cependant, que vous ne pouvez pas compter sur la colonne utilisée pour l'identité ou autre chose si il n'y a pas une véritable clé dans la base de données.
J'ai été en mesure de contourner cela en utilisant une clé composite.
J'ai eu un problème similaire avec un tableau ne contenant que deux colonnes: nom d'utilisateur, rôle.
Ce tableau n'est évidemment pas besoin d'une colonne d'identité. Donc, j'ai créé une clé composite avec un nom d'utilisateur et de son rôle. Cela m'a permis d'utiliser LINQ pour ajouter et de supprimer des entrées.
Vous pouvez utiliser le DataContext.ExecuteCommand méthode à exécuter votre propre instruction insert.
Ou, vous pouvez ajouter un clé primaire à une colonne, cela permettra à la les objets à suivre pour les insertions, mises à jour et supprime par le datacontext. Cela fonctionne même si la colonne n'est pas vraiment un système de clé primaire dans la base de données (comment linq savoir?). Si vous êtes seulement faire des inserts et ne jamais réutiliser une valeur de clé primaire dans la même datacontext, vous serez amende.