EntityFramework.Plus: se detectaron uno o más errores de validación durante la generación del modelo


Pregunta

Estoy utilizando la función de auditoría de EntityFramework.Plus en un proyecto EF6 Code First. Cuando agrego el siguiente código:

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

Obtuve el siguiente error:

Se detectaron uno o más errores de validación durante la generación del modelo: \ r \ n \ r \ nWebsite.Core.Entities.Audit:: EntityType 'Auditoría' no tiene una clave definida. Defina la clave para este EntityType. \ R \ nAuditoría: EntityType: EntitySet 'Auditorías' se basa en el tipo 'Audit' que no tiene claves definidas. \ R \ n "," exceptionType ":" System.Data.Entity.ModelConfiguration. ModelValidationException "

La auditoría no es una entidad en mi proyecto, como lo indica el error. Este error se elimina cuando elimino el código anterior.

¿Alguien puede ayudar? ¿Es posible suprimir la validación de modelos para tipos de bibliotecas externas?

Gracias por adelantado

HS

Respuesta experta

Descargo de responsabilidad : soy el propietario de Entity Framework Plus

Mirando el error:

EntityType 'Auditoría' no tiene clave definida

Parece que usted también mapeó la entidad de auditoría que no debería ser mapeada.

Mire su EntityContext si tiene una línea similar a esta y elimínela:

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

Responder Subpreguntas

Tenemos la clase de auditoría en nuestra biblioteca, pero para que aparezca en el contexto, debe asignarse (lo que no queremos). Es bastante difícil depurar este problema ya que eres el único que lo tiene.

¿Puedes probar el siguiente código en un nuevo proyecto y el actual? En ambos casos, debería funcionar sin problemas.

Si puede, intente proporcionar más información para permitirnos reproducir este problema.

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




Licencia bajo: CC-BY-SA
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué