EF Core中多次调用ApplyConfigurationsFromAssembly的疑问
ApplyConfigurationsFromAssembly 的疑问解答 背景
我在EF Core的OnModelCreating方法中多次调用ApplyConfigurationsFromAssembly,每行指定一个配置类(如CustomerConfiguration、OrderConfiguration),但调试发现:执行任意一行时,不仅会执行对应配置,还会触发同程序集内所有配置类(包括未显式提及的)的执行。针对该现象,有以下三个问题及解答:
1. 这种多调用的写法是否正确?
这种写法完全没必要,甚至属于冗余错误写法。每次调用ApplyConfigurationsFromAssembly都会重复扫描目标程序集并应用所有配置类,即便EF Core内部会处理重复配置的逻辑,但会额外消耗性能,属于无意义的重复操作。
2. EF Core是如何识别并扫描到其他配置的?
ApplyConfigurationsFromAssembly的核心逻辑是:传入的配置类仅用于定位它所在的程序集,而非仅应用该单个配置。EF Core会自动扫描该程序集中所有实现了IEntityTypeConfiguration<TEntity>接口的类,然后逐一执行这些类的配置逻辑。也就是说,只要配置类在同一个程序集内,不管你传入的是哪一个,都会触发整个程序集的配置扫描与应用。
3. 是否只需调用一次该方法?若是,该选择哪个Configuration类作为参数?
对,只需要调用一次即可。参数可以选择目标程序集内任意一个实现了IEntityTypeConfiguration的配置类——比如CustomerConfiguration或OrderConfiguration都可以,EF Core真正关心的是该类所在的程序集,而非类本身。
如果想避免绑定到具体的配置类,还可以直接通过程序集引用调用,写法更清晰:
ApplyConfigurationsFromAssembly(typeof(YourDbContext).Assembly);
内容的提问来源于stack exchange,提问作者EBDS

