예제 #1
0
 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);
     });
 }
예제 #2
0
        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);
            }
        }
예제 #4
0
        public static void AddDefaultTreeRepositories(this IAbpDbContextRegistrationOptionsBuilder builder)
        {
            var realOptions = (builder as AbpDbContextRegistrationOptions);

            builder.Services.AddTreeRepository(realOptions.OriginalDbContextType);
        }