为什么我不能使用ApplyConfiguration()添加我的审核日志表(Audit.NET找不到它)?

时间:2019-07-24 20:24:53

标签: entity-framework-core audit.net

我有一个基于Entity Framework Core 2.2.x构建的现有应用程序。它使用modelBuilder.ApplyConfiguration()将实体与数据模型动态关联。就应用程序的其余部分而言,这适用于所有当前实体,甚至适用于我的新AuditLog实体。

但是,当我配置Audit.NET的实体框架核心提供程序登录到AuditLog时,数据提供程序无法写入数据库:

  

未找到实体类型“ AuditLog”。确保已将实体类型添加到模型中。

我已经在Internet上搜索了该错误的解决方案,并发现将这一行添加到我的代码中会导致Audit.NET查找我的AuditLog:

modelBuilder.Entity<AuditLog>().ToTable("AuditLog", "Audit");

我的代码:

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            Type[] maps = EntityFrameworkReflectionMapping.Get(EntityTypeConfiguration(), BoundAssemblies);

            foreach (object instance in maps.Select(Activator.CreateInstance))
                modelBuilder.ApplyConfiguration((dynamic)instance);

            modelBuilder.Entity<AuditLog>().ToTable("AuditLog", "Audit");

            base.OnModelCreating(modelBuilder);
        }

当系统的其余部分保持原样工作时,为什么需要显式添加实体?

此外,Audit.NET通过未显式添加的实体来检测更改。因此,问题似乎出在Audit.NET的实体框架数据提供程序上,或者我如何使用它。

我希望数据提供者会尊重modelBuilder.ApplyConfiguration()关联实体的方法。

1 个答案:

答案 0 :(得分:0)

有很多原因可能导致异常,但是EF似乎无法检测到AuditLog的实体表关系。

寻找错误的连接字符串,也许您的AuditLog是在与其他实体不同的程序集中定义的。

还尝试在数据库集中将AuditLog实体类添加为DbContext上的属性,例如:

public class MyContext : AuditDbContext
{
    //...
    public DbSet<ModelName> ModelName { get; set; }
}