Data 모듈
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; }
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.