트랜잭션에서 여러 테이블의 특정 작업 수가 발생하는지 확인해야하는 서비스 계층을 구현하고 있습니다. 다음은 작업 흐름입니다.DbContext가 아직 저장되지 않은 삽입 된 레코드에 대한 가시성을 얻는 방법
- HistoricalData 테이블에 저장해야하는 HistoricalData 개체의 인스턴스를 가져옵니다. 이것은 AddHistoricalData 메소드에서 수행됩니다.
- # 1에 삽입되었지만 더 많은 레코드가있을 수있는 HistoricalData 테이블의 모든 레코드를 검색해야합니다. 이 작업은 ProcessAllData 메서드에서 수행됩니다.
- 모든 레코드를 처리 한 결과는 두 개의 다른 테이블 인 ProcessStatus와 ProcessResults에 저장됩니다. 문제가 발생하면 작업 # 1에 삽입 된 내용을 롤백해야합니다.
이것은 구현 된 방법입니다.
public class HistoricalDataService : IHistoricalDataService
{
private MyDbContext dbContext;
public HistoricalDataService(MyDbContext context)
{
this.dbContext = context;
}
void AddHistoricalData(HistoricalData hData)
{
// insert into HistoricalData table
}
void ProcessAllData()
{
// Here we process all records from HistoricalData table insert porcessing results into two other tables
}
void SaveData()
{
this.dbContext.SaveChanges();
}
}
다음은이 클래스 메소드가 호출 된 방법입니다. 이 방법
HistoricalDataService service = new HistoricalDataService (dbcontext);
service.AddHistoricalData(HistoricalData instance);
service.ProcessAllData();
service.SaveData();
문제 AddHistoricalData 메소드를 호출하는 동안 HistoricalData 테이블에 삽입 어떤 dbContext.SaveChanges 만 끝에서 호출되기 때문에, ProcessAllData 전화에 표시되지 않는 것입니다. 어떻게 든 여기에 트랜잭션 범위를 가져올 필요가 있다고 생각하지만 그 트랜잭션 범위를 시작해야하는 함수를 공개하는 방법을 모르십니까?
왜 HistoricalData가 보이지 않는다고합니까? HistoricalData 개체를 dbContext.HistoricalData에 삽입하면 ProcessAllData 메서드에서이 개체를 가져올 수 있습니다. – taquion
이유는 모르지만 context.HistoricalData를 사용하여 AddHistoricalData 메서드에 삽입 된 위치를 알 수 없습니다.Add는 context.HistoricalData 컬렉션의 ProcessAllData Method에 표시됩니다. 내 생각 엔 컨텍스트에서 SaveChanges를 호출해야한다는 것입니다. –