Question

J'ai quelque chose comme ceci:

public override int SaveChanges()
{
    foreach (var changeLog in this.ChangeTracker.Entries()
        .Where(p => p.State == EntityState.Added ||
               p.State == EntityState.Deleted ||
               p.State == EntityState.Modified)
        .SelectMany(entity => AuditRecords(entity)))
    {
        this.ChangeLogs.Add(changeLog);
    }

    return base.SaveChanges();
}

Mais, bien sûr, vérifié les journaux du changement ne contient pas la valeur de la clé primaire de l'entité lors de la EntityState est Ajouté (jusqu'à ce que après SaveChanges).Comment puis-je obtenir la valeur de clé primaire pour changer des fins de vérification?

Richard

Était-ce utile?

La solution

J'avais stocker les références aux entités dans un List<T> (ou un tableau, ou à une autre structure) et alors faire l'appel à la sous-tendent la mise en œuvre de SaveChanges.

Lorsque l'appel est terminé, parce que vos entités sont des types référence (les meilleures pratiques indiquent qu'ils doivent être comme ils sont mutables), les clés primaires sur les éléments de la liste doivent être remplies, à quel point vous pouvez faire passer la liste de changé les entités d'audit de la couche.

Aussi, il apparaît que vous essayez d'ajouter une entité d'un type d'Entité et de l'ajouter à une autre Entité de type collection (tout ce qui est exposé par ChangeLogs);Je le recommande à cet égard.Si vous saisissez les éléments d'une autre entité, ne pas la réutilisation de ces entités, mais copiez le cas pour le bon type d'entité.

Autres conseils

Utilisez GUID pour la clé primaire afin que votre identifiant puisse être généré sans heurter la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top