我有一个基于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()
关联实体的方法。
答案 0 :(得分:0)
有很多原因可能导致异常,但是EF似乎无法检测到AuditLog
的实体表关系。
寻找错误的连接字符串,也许您的AuditLog
是在与其他实体不同的程序集中定义的。
还尝试在数据库集中将AuditLog
实体类添加为DbContext
上的属性,例如:
public class MyContext : AuditDbContext
{
//...
public DbSet<ModelName> ModelName { get; set; }
}