背景:
我们的核心框架通过使用接口(如下)从自身、主应用程序和我们安装的任何模块加载所有实体框架映射:
public interface IEntityTypeConfiguration : IDependency
{
}
我们的核心框架中有一个像这样的 DbContext,它加载所有映射:
public class DefaultDbContext : DbContextBase
{
private readonly Lazy<IEnumerable<IEntityTypeConfiguration>> configurations;
public DefaultDbContext(Lazy<IEnumerable<IEntityTypeConfiguration>> configurations)
: base()
{
this.configurations = configurations;
Configuration.ProxyCreationEnabled = false;
}
public DefaultDbContext(string connectionString, Lazy<IEnumerable<IEntityTypeConfiguration>> configurations)
: base(connectionString)
{
this.configurations = configurations;
Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
foreach (dynamic typeConfiguration in configurations.Value)
{
modelBuilder.Configurations.Add(typeConfiguration);
}
Database.SetInitializer(new CreateTablesIfNotExist<DefaultDbContext>());
}
}
因此,这样我们就可以为所有内容使用一个 DbContext。
问题:
我们遇到了一个问题,即当我们动态添加新模块(具有自己的映射)时,EF 永远不会加载这些映射,即使我们确定DefaultDbContext
已经创建了一个新的实例。因此,必须是 EF 在某处缓存映射。有什么办法可以清除缓存吗?
最后注:
您可能已经猜到了,我们使用的是 IoC,即 Autofac。如果您需要任何进一步的信息,请询问。
任何想法,任何人?