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

c# entity-framework entity-framework-6 entity-framework-plus

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 with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché