Data 모듈

8830 단어
1. 모듈 정의
1. DataSeedOptions의 속성 DataSeedContributorList
IDataSeedContributor를 실현하기만 하면 자동으로 목록을 추가합니다
2. DbConnectionOptions 구성
    public override void ConfigureServices(ServiceConfigurationContext context)
        {
            var configuration = context.Services.GetConfiguration();

            Configure(configuration);

            context.Services.AddSingleton(typeof(IDataFilter<>), typeof(DataFilter<>));
        }

2. 데이터 소프트 삭제, 확장 사전
ISoftDelete
IHasExtraProperties
3. 연결 문자열 해석 및 실현(다세입자 결합)
  public interface IConnectionStringResolver
    {
        [NotNull]
        string Resolve(string connectionStringName = null);
    }

4. 피드 데이터 쓰기
   public interface IDataSeeder
    {
        Task SeedAsync(DataSeedContext context);
    }

호전법
   public static Task SeedAsync(this IDataSeeder seeder, Guid? tenantId = null)
        {
            return seeder.SeedAsync(new DataSeedContext(tenantId));
        }

실현 클래스에서 IDataSeedContributor의 실현 클래스,SeedAsync 방법을 호출합니다
 [UnitOfWork]
        public virtual async Task SeedAsync(DataSeedContext context)
        {
            using (var scope = ServiceScopeFactory.CreateScope())
            {
                foreach (var contributorType in Options.Contributors)
                {
                    var contributor = (IDataSeedContributor) scope
                        .ServiceProvider
                        .GetRequiredService(contributorType);

                    await contributor.SeedAsync(context); } } }

DataSeedContext, 구조 함수는 임대인 Id(필수), 사용자 정의 속성 Dictionary Properties {get;
   public DataSeedContext(Guid? tenantId = null)
        {
            TenantId = tenantId;
            Properties = new Dictionary<string, object>();
        }
 public interface IDataSeedContributor
    {
        Task SeedAsync(DataSeedContext context);
    }

구체적인 실현 방법을 보다
    [UnitOfWork]
        public virtual async Task SeedAsync(
            string adminEmail,
            string adminPassword,
            Guid? tenantId = null)
        {
            Check.NotNullOrWhiteSpace(adminEmail, nameof(adminEmail));
            Check.NotNullOrWhiteSpace(adminPassword, nameof(adminPassword));

            var result = new IdentityDataSeedResult();

            //"admin" user
            const string adminUserName = "admin";
            var adminUser = await _userRepository.FindByNormalizedUserNameAsync(
                _lookupNormalizer.Normalize(adminUserName)
            );

            if (adminUser != null)
            {
                return result;
            }

            adminUser = new IdentityUser(
                _guidGenerator.Create(),
                adminUserName,
                adminEmail,
                tenantId
            )
            {
                Name = adminUserName
            };

            (await _userManager.CreateAsync(adminUser, adminPassword)).CheckErrors();
            result.CreatedAdminUser = true;

            //"admin" role
            const string adminRoleName = "admin";
            var adminRole = await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize(adminRoleName));
            if (adminRole == null)
            {
                adminRole = new IdentityRole(
                    _guidGenerator.Create(),
                    adminRoleName,
                    tenantId
                )
                {
                    IsStatic = true,
                    IsPublic = true
                };

                (await _roleManager.CreateAsync(adminRole)).CheckErrors();
                result.CreatedAdminRole = true;
            }

            (await _userManager.AddToRoleAsync(adminUser, adminRoleName)).CheckErrors();

            return result;
        }

 
5. IDataFilter
DataFilter 실례를 얻습니다. 초기화되었기 때문에 AbpDataFilterOption에 따라 State를 저장합니다. 특정한 (찾을 수 없음) 이 없으면 기본적으로true입니다. 지정한 값에 따라
Disposeable 설정 방법을 임시로 지정하여 원래 값으로 되돌릴 수도 있습니다.
DataFilterState는 모든 유형이 데이터 필터링을 하는지 여부를 저장합니다. 기본값은 True이고 IsEnable가 없으면
DataFilterOptions
   public interface IDataFilter
        where TFilter : class
    {
        IDisposable Enable();

        IDisposable Disable();

        bool IsEnabled { get; }
    }

좋은 웹페이지 즐겨찾기