public static void TreeEntity <TEntity>(this IAbpDbContextRegistrationOptionsBuilder builder, Action <TreeOptions <TEntity> > optionsAction) where TEntity : class, ITree <TEntity> { builder.Services.Configure <TreeOptions>(options => { options.TreeEntity(optionsAction); }); }
public static void Configure( IAbpDbContextRegistrationOptionsBuilder optionsBuilder, string connectionString) { optionsBuilder.AddDefaultRepositories(includeAllEntities: true); optionsBuilder.Services.Configure <AbpDbContextOptions>(abpDbContextOptions => { abpDbContextOptions.Configure(configContext => { var builder = configContext.DbContextOptions; builder.EnableSensitiveDataLogging(); builder.UseNpgsql(connectionString, x => x.MigrationsAssembly("MyMessenger.EntityFramework")); }); }); }
/// <summary> /// 动态创建仓储 /// </summary> /// <typeparam name="TDependInterface"></typeparam> /// <param name="options"></param> public static void ConfigureDynamicRepository <TDependInterface>(this IAbpDbContextRegistrationOptionsBuilder options) { //反射获取方法 var AddRepositoryMethod = options.GetType().GetMethod("AddRepository"); // AddRepository var EntityMethod = options.GetType().GetMethod("Entity"); // EntityOptions foreach (Type entityType in GetAutoBuildEntities <TDependInterface>()) { // 构建实体导航属性自动包含委托 var call = EntityIncludeBuilder.Instance.Create(entityType); EntityMethod.MakeGenericMethod(entityType).Invoke(options, new object[] { call }); // 获取实体主键类型 var primaryKeyType = EntityHelper.FindPrimaryKeyType(entityType); // 构建实体对应的仓储类型 Type registerRepository = (primaryKeyType == null ? typeof(EfCoreRepository <,>) : typeof(EfCoreRepository <, ,>)) .MakeGenericType(typeof(LazyCMSDbContext), entityType, primaryKeyType); // 添加实体仓储 AddRepositoryMethod.MakeGenericMethod(entityType, registerRepository).Invoke(options, null); } }
public static void AddDefaultTreeRepositories(this IAbpDbContextRegistrationOptionsBuilder builder) { var realOptions = (builder as AbpDbContextRegistrationOptions); builder.Services.AddTreeRepository(realOptions.OriginalDbContextType); }