매핑 파일에 FieldNotInFile
특성을 사용할 때 예기치 않은 동작이 나타나는 것으로 나타납니다. 아래 내용을 참조하십시오.FileHelpers : FieldNotInFile 특성이 ReadFileAsDT DataTable 결과의 필드를 완전히 생략합니다.
헤더 레코드에 대한 매핑은 MasterDetail 엔진 열어 옵션을 유지하기 위해 별도로 정의됩니다
public class HeaderMapping
{
public string ID;
public DateTime RptDateFrom;
public DateTime RptDateTo;
public DateTime GenerationDate;
....
}
그들은으로 지정됩니다 그래서 최종 기록 결과로 헤더에서 검색 한 값을 결합하고 싶습니다 나중에 추가 할 FieldNotInFile
특성
public class RecordMapping
{
// Values not in source
[FieldNotInFile()]
public string ID;
[FieldNotInFile()]
public DateTime RptDateFrom;
[FieldNotInFile()]
public DateTime RptDateTo;
[FieldNotInFile()]
public DateTime GenerationDate;
// Start values from source
public string RowPrefix;
public string Field1;
public string Field2;
public string Field3;
....
}
엔진 실행시 나는 두 개의 인스턴스를 정의했습니다. 첫 번째는 단일 헤더 레코드를 캡처하고 그 값을 파싱합니다. AfterReadRecord
이벤트는 첫 번째 줄 다음에 엔진을 중지하는 데 사용됩니다.
static void Main(string[] args)
{
// Extract the header
FileHelperEngine<HeaderMapping> headerEngine = new FileHelperEngine<HeaderMapping>();
headerEngine.AfterReadRecord +=
new FileHelpers.Events.AfterReadHandler<HeaderMapping>(AfterHeaderRead);
HeaderMapping[] headerRecord = headerEngine.ReadFile(source.FullName);
// Capture Values
companyId = headerRecord[0].ID;
rptDateFrom = headerRecord[0].RptDateFrom;
rptDateTo = headerRecord[0].RptDateTo;
generationDate = headerRecord[0].GenerationDate;
....
다음으로 레코드 엔진이 생성됩니다. BeforeReadRecord
이벤트는 특성을 사용하여 RecordMapping
에 표시된 자리 표시 자에 이전에 캡처 한 값을 삽입하는 데 사용됩니다.
....
// Extract the Records
FileHelperEngine<RecordMapping> recordEngine = new FileHelperEngine<RecordMapping>();
recordEngine.BeforeReadRecord +=
new FileHelpers.Events.BeforeReadHandler<RecordMapping>(BeforeThisRecord);
DataTable outputTable = recordEngine.ReadFileAsDT(source.FullName);
}
....
private static void BeforeThisRecord(EngineBase engine, BeforeReadEventArgs<RecordMapping> e)
{
e.Record.ID = companyId;
e.Record.RptDateFrom = rptDateFrom;
e.Record.RptDateTo = rptDateTo;
e.Record.GenerationDate = generationDate;
}
outputTable 결과가 예상과 다릅니다. FieldNotInFile
으로 표시된 필드는 DataTable 결과에서 완전히 생략되었습니다. 프로세스를 디버깅 할 때 BeforeThisRecord
메서드가 올바르게 실행되고 적절한 값을 할당하지만 출력에 반영되지 않습니다. DataTable의 열 등 이상하게 I는 다른 방법을 사용 ..
List <RecordMapping> recordList = recordEngine.ReadFileAsList(source.FullName);
목록
등 RowPrefix, 필드 1, 필드 2, 그리고 ID, RptDateFrom, RptDateTo, GenerationDate, RowPrefix로서 출력 항목에 올바른 값이 모두 포함 된 RecordMapping
개체가 포함되어 있습니다. FieldNotInFile
특성의 DataTable 번역이 범인 인 것처럼 보입니다. 내가 잘못 했니? 이거 버그 야?