IDataReader를 사용하여 SqlBulkCopy에서 레코드 반환

c# entity-framework sqlbulkcopy sql-server

문제

SqlBulkCopy 클래스를 사용하여 데이터베이스에 대량 삽입 / 업데이트를 수행하고 있습니다. 데이터가 삽입 / 업데이트 된 후에는 더 많은 논리를 수행하려고합니다.

현재 IDataReader에는 삽입하고 업데이트 할 레코드가 있습니다. 데이터베이스에 대한 모든 조치가 올바르게 작동합니다. 그러나 데이터를 쓰고 나면 IDataReader 개체에는 더 이상 행이 없습니다.

삽입 된 레코드에 대해 자동으로 생성 된 고유 식별자 필드를 사용하여 행을 유지하는 방법이 있습니까?

여기 내 코드에서 발췌 문장입니다 :

    public IDataReader DoBulkCopy<T>(List<T> DataToInsert, string DestinationTableName)
    {
        var BulkCopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString, SqlBulkCopyOptions.KeepNulls);
        BulkCopy.BulkCopyTimeout = 0;
        BulkCopy.BatchSize = 50;
        BulkCopy.DestinationTableName = DestinationTableName;

        IDataReader reader = DataToInsert.AsDataReader();
        BulkCopy.WriteToServer(reader);
        BulkCopy.Close();

        return reader;
    }

미리 감사드립니다.

수락 된 답변

나는 이것이 불가능하다는 많은 연구 끝에 결론에 도달했다. 나는 주변에서 일할 수 있었다. 내가 한 것은 쿼리를 실행하기 전에 DateTime.Now ()를 변수에 쓴 것입니다. 쿼리가 실행 된 후 Insert / Update 전에 기록 된 DateTime 변수보다 큰 LastUpdated 타임 스탬프 필드가있는 모든 레코드에 대해 선택 쿼리를 수행했습니다.

이 시나리오의 데이터는이 스케줄러에 의해서만 삽입 / 업데이트되기 때문에이 시나리오는 정상적으로 작동합니다. 여러 곳이나 사용자가 데이터를 제공 할 수있는 앱인 경우이 접근 방식을 다시 고려하거나 조정해야합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.