Je veux juste savoir si linq to sql auto a mis à jour la colonne id d'une classe (objet row de la table) après que SubmitChanges soit appelée en insérant une nouvelle ligne à cette table, cela serait-il fantastique?Est-ce que LINQ To SQL met automatiquement à jour la colonne ID LOCAL/CLIENT après un appel SubmitChanges?
Répondre
Vous pouvez vérifier qu'une colonne IDENTITY sera mise à jour SubmitChanges()
en regardant l'attribut [Column]
pour la propriété mappée (ou élément <Column>
si vous utilisez un fichier de mappage XML externe).
Il y a deux propriétés qui seront définies sur l'attribut [Column]
, IsDbGenerated = true
et AutoSync = OnInsert
- le premier attribut indique LINQ que la valeur de la colonne cible est créée par la base de données telles que des colonnes d'identité ou timestamp/rowversion, et Ce dernier indique à LINQ de mettre à jour l'objet modèle avec la valeur après l'insertion d'une base de données.
Les deux propriétés doivent être définies de la sorte pour que le comportement attendu se produise. Si vous utilisez SqlMetal ou le concepteur Visual Studio, le code généré le gérera automatiquement pour vous, tant que la colonne était IDENTITY ou TIMESTAMP pour commencer. Si vous modifiez ultérieurement la colonne en un type IDENTITY, vous devrez soit régénérer le code LINQ, soit mettre à jour manuellement les attributs.
Oui, il le fait aussi longtemps que le AutoSync
et IsDbGenerated
de ColumnAttribute
sont mis à AutoSync.OnInsert
et true
respectivement.
Ainsi:
[Column(
Storage="_Id",
AutoSync=AutoSync.OnInsert,
DbType="Int NOT NULL IDENTITY",
IsPrimaryKey=true,
IsDbGenerated=true
)]
Ces paramètres sont accessibles dans le concepteur. AutoSync.OnInsert
et true
sont les paramètres par défaut.
Ici vous pouvez voir en action:
var db = new MessageDataContext();
db.Log = Console.Out;
Message m = new Message();
m.Text = "Hello, world!";
db.Messages.InsertOnSubmit(m);
db.SubmitChanges();
Voici la table Message
a deux colonnes Id
(une autonumber colonne PK) et Text
. Cela provoque ce qui suit à imprimer sur la console:
INSERT INTO [dbo].[Message]([Text])
VALUES (@p0)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input VarChar (Size = 13; Prec = 0; Scale = 0) [Hello, world!]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
La deuxième instruction SQL affiche la DataContext
récupérer automatiquement l'identité attribuée à la Message
que nous avons inséré dans la base de données.
Ainsi:
db.Messages.InsertOnSubmit(m);
db.SubmitChanges();
Console.WriteLine(m.Id);
imprimera le Id
attribué à m
.
- 1. LINQ to SQL: SubmitChanges() ne fonctionne pas?
- 2. LINQ ne se met pas à jour sur .SubmitChanges()
- 3. ASP.NET LINQ à SQL SubmitChanges() ne met pas à jour la base de données
- 4. Update SubmitChanges() - ne met pas à jour
- 5. Erreur LINQ to SQL erratique: "l'opération ne peut pas être effectuée pendant un appel à SubmitChanges."
- 6. accès multi-threading à SubmitChanges() (LINQ to SQL)
- 7. LINQ to SQL ne met pas à jour si j'inclus une colonne calculée
- 8. LINQ to SQL mise à jour ne fonctionne pas correctement
- 9. Comment ajouter un jour à jour dans Linq to SQL
- 10. LINQ to SQL: Premier appel
- 11. Est-il possible dans Linq To SQL d'obtenir le code SQL (brut) sous-jacent dans un appel SubmitChanges()?
- 12. Mises à jour LINQ to SQL
- 13. Puis-je "annuler" une mise à jour LINQ to SQL?
- 14. Méthodes d'extensibilité LINQ to SQL générées automatiquement
- 15. La colonne version du serveur SQL met à jour plus que ce qu'elle devrait
- 16. La table ne se met pas à jour dans EF lors de la mise à jour avec un appel SQL?
- 17. LINQ to SQL Compact - mise à jour obligatoire
- 18. colonne de somme avec LINQ to SQL
- 19. Mise à jour à l'aide de LINQ to SQL
- 20. générer automatiquement dans LINQ à SQL
- 21. LINQ to SQL - DuplicateKeyException lors de la mise à jour
- 22. Contexte LINQ SubmitChanges
- 23. Linq to SQL Records où ID enfant dans la liste
- 24. ne sont pas mis à jour après SubmitChanges()
- 25. Linq to SQL: mise à jour d'une racine agrégée
- 26. LINQ to Enities: jeu de résultats ne pas avoir mis à jour après procédure stockée appel
- 27. Comment coder les extensions partielles que Linq to SQL génère automatiquement?
- 28. LINQ to SQL ne met pas à jour les enregistrements de base de données dans l'application MVC 2
- 29. La mise à jour Linq to SQL ne fonctionne pas en utilisant le modèle Repository
- 30. LINQ to SQL type généré automatiquement pour la procédure stockée
Vous pourriez l'essayer et voir ce qui se passe. Si c'est le cas, vous pouvez même poster votre propre réponse ici. – Eilon