EntityFramework.Plus: uno o più errori di convalida sono stati rilevati durante la generazione del modello


Domanda

Sto utilizzando la funzionalità di controllo di EntityFramework.Plus in un progetto EF6 Code First. Quando aggiungo il seguente codice:

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}");
            };
        }

Ottengo il seguente errore:

Uno o più errori di convalida sono stati rilevati durante la generazione del modello: \ r \ n \ r \ nWebsite.Core.Entities.Audit:: EntityType 'Audit' non ha una chiave definita. Definisci la chiave per questo EntityType. \ R \ nAudits: EntityType: EntitySet 'Audits' è basato sul tipo 'Audit' che non ha chiavi definite. \ R \ n "," exceptionType ":" System.Data.Entity.ModelConfiguration. ModelValidationException"

L'audit non è un'entità nel mio progetto, come affermato dall'errore. Questo errore viene rimosso quando rimuovo il codice sopra.

Qualcuno può aiutare? È possibile sopprimere la convalida del modello per i tipi di librerie esterne?

Grazie in anticipo

HS

Risposta esperta

Disclaimer : sono il proprietario di Entity Framework Plus

Guardando l'errore:

EntityType 'Audit' non ha una chiave definita

Sembra che tu abbia mappato anche l'entità Audit che non dovrebbe essere mappata.

Guarda il tuo EntityContext se hai una riga simile a questa e rimuovila:

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

Rispondi alle domande secondarie

Abbiamo la classe Audit nella nostra libreria, ma per farla apparire nel contesto, dovrebbe essere mappata (cosa che non vogliamo). È piuttosto difficile eseguire il debug di questo problema poiché sei l'unico a ottenerlo.

Puoi provare il seguente codice in un nuovo progetto e quello attuale? In entrambi i casi, dovrebbe funzionare senza problemi.

Se puoi, prova a fornire ulteriori informazioni per permetterci di riprodurre questo problema.

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




Autorizzato sotto: CC-BY-SA
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché