Je tire mes cheveux pendant environ 2 jours maintenant, car je ne peux tout simplement pas obtenir EF pour enregistrer des modifications chaque fois que j'ajoute une entité nombreuses à plusieurs à une entité existante.
Ma structure est simple: p>
J'ai une table appelée une table appelée et a Quand j'ai généré mes entités (base de données d'abord), je reçois une personne Le problème se pose lorsque j'essaie d'enregistrer une personne code> existante code>, avec une liste modifiée de mots-clés. Seules les propriétés scalaires (chaînes) sont sauvegardées, pas mes mots-clés! p> Je suis à peu près sûr que je ne suis pas le seul à avoir ce problème, (en fait, je suis tout à fait sûr que j'ai vu quelques questions ici déjà, sur le même sujet, mais je suis Impossible de trouver une réponse de travail ...), principalement pour les versions plus anciennes de EF, ce qui est une autre raison de la raison pour laquelle j'ai commencé une autre question: n'a rien changé qui aborde cette question du tout? P> ici est mon code qui met la mise à jour (et la création) des personnes. Vous remarquerez ma tentative de fabrication d'EF Enregistrer les modifications en conséquence. P> personne code>, il a un identifiant (primaire, identité) et quelques autres champs de chaîne p> li>
mot-clé code> avec un identifiant (principale, identité) et un champ de chaîne appelé valeur code> p> p> l>
personkeywordrelation code>, avec un PersonID code> et un mots-clés mot-clé p> l> li>
ul> personne code>, avec un icollection
public void SavePersons(IList<Person> persons)
{
// Create a EF Context
using (var ctx = new MyDbEntities())
{
foreach (var person in persons)
{
// Attach
ctx.Persons.Attach(person);
// Insert or update?
ctx.Entry(person).State = person.Id == 0 ? EntityState.Added : EntityState.Modified;
// Get current keywords before clearing from entity
var keywords = new List<Keyword>(person.Keywords);
// Clear keywords from entity, so we can add fresh ones, hopefully
// EF will have an easier time handling this..
person.Keywords.Clear();
// Add keywords
keywords.ForEach(kw =>
{
ctx.Keywords.Attach(kw);
ctx.Entry(kw).State = EntityState.Modified;
person.Keywords.Add(kw);
});
}
// Save
ctx.SaveChanges();
}
}
3 Réponses :
Essayez d'ajouter Je soupçonne que votre liste de mots-clés n'est jamais renseignée car vous le nettoyez avant de l'hydrater. P > p>
Impossible d'utiliser BOLD B> MARCHUPINE INTÉRIEUR INTÉRIEURE, ASTERISKS supprimé et remplacé par commentaire
Ce qui suit est donc non testé mais, après vous em> corrige mes bugs;) Cela devrait espérer faire le tour. Je ne connais pas le reste de votre code, donc j'ai choisi de créer des clones des données d'entrée et de la fixation des objets au contexte dans un ordre spécifique. EDIT: FORT> Méthode renommée p>
Bravo pour le iEnumerable
Enfin, ... finalement je peux me reposer! J'ai trouvé la solution! Ce n'est pas une jolie, mais ça marche!
Voici le code - le partage est attentionné. P>
Ceci est définitivement la dernière fois que je travaillerai avec le cadre d'entité. Provoque plus de douleur et d'agonie que bien. P>
Cela m'a aidé, alors merci d'avoir posté votre solution. La clé utilisait inclut code> lors de la récupération de l'entité. J'ai pensé que mon problème avait quelque chose à voir avec le contexte de ne pas suivre la propriété de navigation. Je ne voulais pas désactiver le chargement paresseux car cela m'aurait causé des problèmes lors de la cartographie de l'entité à son Dto.
Il m'a fallu beaucoup de temps pour le comprendre, j'ai posté une réponse à cette question à plusieurs reprises, que je devais ensuite supprimer, car d'autres tests ont révélé des bugs.
Voici une question similaire sur Stackoverflow sur la manière de coder une version générique goo.gl/2Scy
Les valeurs de vos mots-clés changent-elles ou sont-elles la relation entre la personne et les mots-clés changeant ou les deux?
Seule la relation - Cependant, les deux devraient être pris en charge, de préférence.