Entity Framework SaveChanges () ne fonctionne pas?

c#-3.0 entity-framework

Question

J'utilise le framework d'entité avec Visual Studio 2008, bien sûr que c'était SP1 .NET Framework et VS lui-même. Mon application est développée dans un environnement à plusieurs niveaux. Première étape, je convertis les données du contexte en collecte et les sérialise en utilisateur.

HRMSDBContext context = new HRMSDBContext();

List<InHouseTrainingHead> heads = context.InHouseTrainingHead.ToList<InHouseTrainingHead>();

foreach (InHouseTrainingHead head in heads)
{
    context.Detach(head);
}

return heads;

Une fois que l'utilisateur a modifié certaines données et cliqué sur Enregistrer, cette méthode retourne à la méthode d'enregistrement.

HRMSDBContext context = new HRMSDBContext();

foreach (InHouseTrainingHead head in lists)
{
    context.Attach(head);
    context.ApplyPropertyChanges(head.EntityKey.EntitySetName, head);
}

context.SaveChanges();

Malheureusement, après SaveChanges (), rien ne se passe. Comment puis-je résoudre ce problème?

Réponse acceptée

Vous n'utilisez pas ObjectContext.ApplyPropertyChanges qu'il est destiné à être utilisé. Vous avez besoin de deux instances de l'entité - une non modifiée associée au contexte et une modifiée modifiée. Les modifications sont ensuite appliquées à l'entité attachée non modifiée, elle est modifiée et vous pouvez enregistrer les modifications. Vous ne devez donc pas attacher l'entité modifiée, mais la charger de la base de données avant d'appeler ObjectContext.ApplyPropertyChanges .


Réponse populaire

Pour étendre la réponse de Daniel Brückner - dans votre exemple, vous essayez d' ApplyPropertyChanges entre l'objet head et lui-même. De toute évidence, il n'y a pas de changements, donc rien n'est enregistré. Si vous ne souhaitez pas extraire l'enregistrement de la base de données, vous pouvez toutefois définir EntityState le EntityState de l'entité nouvellement attachée sur Modified . Dans ce cas, il sera sauvegardé dans la base de données:

HRMSDBContext context = new HRMSDBContext();

foreach (InHouseTrainingHead head in lists)
{
    context.Attach(head);
    ObjectStateEntry addedEntity = context.ObjectStateManager.GetEntry(head);
    addedEntity.ChangeState(EntityState.Modified);
}

context.SaveChanges();


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow