EntityFramework.Plus: Une ou plusieurs erreurs de validation ont été détectées lors de la génération du modèle.


Question

J'utilise la fonctionnalité d'audit de EntityFramework.Plus dans un projet EF6 Code First. Quand j'ajoute le code suivant:

public virtual DbSet<AuditEntry> AuditEntries { get; set; }

public virtual DbSet<AuditEntryProperty> AuditEntryProperties { get; set; }

static EntityContext()
   {
            AuditManager.DefaultConfiguration.AutoSavePreAction = (context, audit) =>
            {
                var Entities = context as EntityContext;
                if (Entities != null)
                {
                    Entities.AuditEntries.AddRange(audit.Entries);
                }
                else throw new InvalidOperationException($"Context is null for {context.Database.Connection}");
            };
        }

Je reçois l'erreur suivante:

Une ou plusieurs erreurs de validation ont été détectées lors de la génération du modèle: \ r \ nWebsite.Core.Entities.Audit:: Le type d'entité "Audit" n'a pas de clé définie. Définissez la clé pour ce type d'entité. \ R \ nAudits: EntityType: EntitySet 'Audits' est basé sur le type 'Audit' qui n'a pas de clé définie. \ R \ n "," exceptionType ":" System.Data.Entity.ModelConfiguration. ModelValidationException "

L'audit n'est pas une entité dans mon projet - comme l'indique l'erreur. Cette erreur est supprimée lorsque je supprime le code ci-dessus.

Quelqu'un peut-il aider? Est-il possible de supprimer la validation de modèle pour les types de bibliothèques externes?

Merci d'avance

HS

Réponse d'expert

Avertissement : je suis le propriétaire d' Entity Framework Plus

En regardant l'erreur:

EntityType 'Audit' n'a pas de clé définie

Il semble que vous ayez également mappé l'entité d'audit qui ne devrait pas l'être.

Regardez votre EntityContext si vous avez une ligne similaire à celle-ci et supprimez-la:

public virtual DbSet<Audit> Audits { get; set; }

Répondre aux sous-questions

Nous avons la classe Audit dans notre bibliothèque, mais pour l’afficher dans le contexte, elle doit être mappée (ce que nous ne voulons pas). Il est assez difficile de résoudre ce problème car vous êtes le seul à l'obtenir.

Pouvez-vous essayer le code suivant dans un nouveau projet et le projet actuel? Dans les deux cas, cela devrait fonctionner sans problèmes.

Si vous le pouvez, essayez de fournir plus d'informations pour nous permettre de reproduire ce problème.

public virtual DbSet<Audit> Audits { get; set; }




Sous licence: CC-BY-SA
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi