Le moyen le plus efficace de mise à jour avec LINQ to SQL
Puis-je mettre à jour mon dossier employé comme donné dans la fonction ci-dessous ou dois-je faire une requête de l'employé de la collection en premier et ensuite mettre à jour les données?
public int updateEmployee(App3_EMPLOYEE employee)
{
DBContextDataContext db = new DBContextDataContext();
db.App3_EMPLOYEEs.Attach(employee);
db.SubmitChanges();
return employee.PKEY;
}
Ou dois-je faire la suite?
public int updateEmployee(App3_EMPLOYEE employee)
{
DBContextDataContext db = new DBContextDataContext();
App3_EMPLOYEE emp = db.App3_EMPLOYEEs.Single(e => e.PKEY == employee.PKEY);
db.App3_EMPLOYEEs.Attach(employee,emp);
db.SubmitChanges();
return employee.PKEY;
}
Mais je ne veux pas utiliser la deuxième option. Est-il un moyen efficace de mise à jour des données?
J'obtiens cette erreur par l'utilisation de deux façons:
Une tentative a été faite pour Attacher ou d'Ajouter une entité qui n'est pas nouveau, peut-être d'avoir été chargé d'une autre DataContext. Ce n'est pas pris en charge.
- dans la deuxième méthode vous attachez de l'entité de contexte, car il est déjà rempli à partir d'elle. Appelez simplement SubmitChanges()
Vous devez vous connecter pour publier un commentaire.
- Je trouver la suite contourner ce problème :
1) extraction et de mise à jour de l'entité (que je vais utiliser de cette façon parce que c'est ok pour moi )
2) désactiver ObjectTrackingEnabled comme suit
3) enlever tous les objets liés à l'
4) utiliser l'horodatage dans la colonne
5) Créer une procédure stockée pour la mise à jour de vos données et de les appeler par db contexte
Vous ne pouvez pas attacher une modification de l'entité à un DataContext quand il n'y a pas de RowVersion colonne. Au lieu de cela, vous pouvez stocker entité d'origine dans votre application aussi longtemps que le maintien d'une copie des modifications de données. Ensuite, lorsque des modifications doivent être enregistrées vous pouvez joindre entité d'origine à un DataContext, changer ses valeurs pour correspondre à la modification de l'entité de valeurs et de soumettre les modifications.
Voici un exemple:
Mise à jour:
Il y a une table dans la base de données avec les colonnes ID, le Nom, les Notes
Il y a une discussion sur ce sujet ici MSDN à l'adresse s
vous recommandons d'utiliser un IsVersion champ et la méthode Attach
Vous pouvez attacher une seule modifié entité, à l'aide de cette surcharge:
Notez que pour que cela fonctionne, vous devez avoir à votre table une "Version" colonne de type timestamp"
C'est une fonction dans mon Référentiel de la classe que j'utilise pour mettre à jour les entités
Où TEntity est votre DB Classe et en fonction de votre installation, vous pourriez juste voulez faire
Utiliser cette étendre la méthode de mise à jour de toutes les propriétés qui sont les attributs de colonne:
Je veux dire, il faut d'abord récupérer l'original de la base de données, utilisez la méthode pour cartographier toutes les colonnes les attributs d'élément nouveau à l'original, et enfin faire un submit.
J'espère que cette aide.