如何更优地注册Entity Framework实体配置类?
优化EF Core实体配置注册的几种方式
1. 自动扫描程序集(最推荐)
直接用EF Core提供的ApplyConfigurationsFromAssembly方法,一次性搞定所有配置类的注册,不用再逐个new:
// 在DbContext的OnModelCreating方法里替换原来的代码 modelBuilder.ApplyConfigurationsFromAssembly(typeof(OrderItemDetailPaxMap).Assembly);
随便拿一个你的配置类(比如OrderItemDetailPaxMap)用typeof获取程序集就行,EF会自动扫描这个程序集里所有实现IEntityTypeConfiguration的类,自动完成注册,完全替代之前重复的实例化和Configure调用。
2. 反射批量注册(自定义筛选场景)
如果需要对配置类做筛选(比如只注册特定命名空间下的),可以用反射批量处理:
// 在DbContext的OnModelCreating方法中 var assembly = Assembly.GetExecutingAssembly(); // 筛选出所有实现IEntityTypeConfiguration的类型 var configTypes = assembly.GetTypes() .Where(t => t.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>))); foreach (var type in configTypes) { // 实例化配置类并调用Configure dynamic configInstance = Activator.CreateInstance(type); var entityType = type.GetInterfaces()[0].GetGenericArguments()[0]; var entityBuilder = modelBuilder.Entity(entityType); configInstance.Configure(entityBuilder); }
要是需要筛选特定命名空间,就在Where条件里加个&& t.Namespace == "Your.Project.Configurations"就行,灵活度更高。
内容的提问来源于stack exchange,提问作者advapi
相关产品推荐
相关产品推荐

