Skip to content

Fox Data Service Request

Fox Data ServiceFox Query 수행에 필요한 정보를 담는 FoxDataRequest 혹은 FoxDataRequestCollection 객체를 입력으로 받아 쿼리를 수행하고 그 결과를 담는 FoxDataResponse 객체 혹은 FoxDataResponseCollection 객체를 반환합니다. Fox Data Service 가 쿼리 수행 뿐만 아니라 트랜잭션 처리, 쿼리 수행 성능 측정, 진단 정보 수집 등의 다양한 기능을 제공하기 때문에 FoxDataRequest 객체도 쿼리 수행 및 결과에 필요한 정보 뿐만아니라 트랜잭션, 성능 정보, 진단 정보를 위한 다양한 정보를 담을 수 있도록 구성되어 있습니다.

FoxDataRequest 객체

FoxDataRequest 객체는 Fox Data Service 가 쿼리를 수행하기 위해 필요한 정보를 담는 객체입니다. Fox Data Service 는 Fox Query 를 사용하여 쿼리를 수행하기 때문에 반드시 포함되어야 할 정보로서 쿼리 ID와 매개변수(필요한 경우)를 포함해야 합니다.

기본 속성들

  • QueryId 속성

    Fox Data Service 가 수행할 Fox Query 를 식별하는 문자열입니다. FoxQuery Id 는 두 부분으로 나누어 지며 앞 부분은 FoxQuery 를 찾을 .foxml 파일을 나타내며 뒷 부분은 .foxml 파일 내에서 FoxQuery 를 찾는데 사용됩니다. 예를 들어 MyQuery 라는 이름의 FoxQuery 가 MyQueries.foxml 파일에 정의되어 있다면 QueryId 는 MyQueries:MyQuery 가 됩니다. 상세한 내용은 Fox Query ID 상세 정보 를 참조하십시오.

    JSON 형태에서 QueryId 속성은 queryId 속성으로 표현됩니다.

    1
    2
    3
    {
        "queryId": "MyQueries:MyQuery"
    }
    
  • Parameters 속성

    Fox Query 를 수행할 때 필요한 매개변수들을 담는 FoxServiceParameterCollection 타입의 컬렉션입니다. FoxServiceParameterCollection 컬렉션은 기본적으로 딕셔너리와 동일하게 사용할 수 있으며 이외에도 null 값을 DBNull.Value 로 변경하는 기능 등도 포함하고 있습니다.

    JSON 형태에서 Parameters 속성은 parameters 객체로 표현됩니다.

    1
    2
    3
    4
    5
    6
    7
    8
    {
        "queryId": "MyQueries:MyQuery",
        "parameters": {
            "param1": "value1",
            "param2": 123,
            "param3": true
        }
    }
    
  • DatabaseName 속성

    접속할 데이터베이스를 나타내는 연결 문자열 이름 입니다. 이 속성이 지정되지 않거나 null 값이 사용되면 Fox Data Service 는 서비스의 구성 파일로부터 디폴트 연결 문자열을 사용합니다.

    JSON 형태에서 DatabaseName 속성은 databaseName 속성으로 표현됩니다.

    1
    2
    3
    4
    5
    {
        "queryId": "MyQueries:MyQuery",
        "databaseName": "ProductDB",
        "parameters": { }
    }
    
  • ThrowException 속성

    쿼리 수행 중 오류 발생 시 예외를 전파할 것인지 여부를 나타냅니다. 이 속성이 true 이면 서비스는 FoxDataServiceException 예외를 발생합니다. 이 속성이 false 이면 서비스는 예외를 발생시키지 않고 오류 정보를 FoxDataResponse 객체에 담아 반환합니다. 기본값은 true 입니다. Fox Data Service 의 예외 처리 방식에 대한 상세한 내용은 Fox Data Service 예외 처리 항목을 참조하십시오.

    JSON 형태에서 ThrowException 속성은 throwException 속성으로 표현됩니다.

    1
    2
    3
    4
    {
        "queryId": "MyQueries:MyQuery",
        "throwException": false
    }
    
  • CommandTimeout 속성

    데이터 액세스 커맨드의 타임아웃(초)을 지정하는 정수형 옵션입니다. 지정하지 않으면 서비스의 연결 문자열에 설정된 값 혹은 해당 데이터 프로바이더 Command 객체에 설정된 기본값이 사용됩니다.

    JSON 형태에서 CommandTimeout 속성은 commandTimeout 속성으로 표현됩니다.

    1
    2
    3
    4
    {
        "queryId": "MyQueries:MyQuery",
        "commandTimeout": 10
    }
    

ExecuteMultiple 관련 속성들

  • Operation 속성

    ExecuteMultiple 메서드는 호출 시에 여러 개의 FoxDataRequest 객체를 포함하는 FoxDataRequestCollection 객체를 입력으로 받습니다. 이때 각 FoxDataRequest 객체가 수행할 작업(ExecuteDataSet, ExecuteNonQuery)을 지정하는 FoxDataOperations 열거 타입 속성입니다. FoxDataOperations 열거 타입은 다음과 같은 값을 가집니다.

    • None : 아무런 작업도 수행하지 않습니다.
    • ExecuteDataSet : Fox Query 를 수행하고 결과를 DataSet 객체로 반환합니다.
    • ExecuteNonQuery : Fox Query 를 수행하고 영향받은 행의 수를 반환합니다.
    • ExecuteScalar : Fox Query 를 수행하고 결과의 첫 번째 행의 첫 번째 열 값을 반환합니다.
    • SaveDataTable : DataSet 속성에 지정된 DataTable 객체를 데이터베이스에 저장합니다.

    ExecuteMultiple 메서드는 컬렉션에 포함된 각 FoxDataRequest 객체의 Operation 속성 값에 따라 각 쿼리를 수행하며 그 결과를 FoxDataResponse 객체에 담고 다시 이 객체를 FoxDataResponseCollection 에 추가하여 반환합니다. 만약 개별 FoxDataRequest 객체의 Operation 속성 값이 지정되지 않은 경우, ExecuteMultiple 메서드는 FoxDataServiceException 예외를 유발합니다.

    JSON 형태에서 Operation 속성은 operation 속성으로 표현됩니다. 다음 예제는 두 개의 쿼리를 수행하는 FoxDataRequestCollection 객체를 JSON 형태로 표현한 것입니다.

    {
        "items": [
            {
                "queryId": "MyQueries:MyQuery1",
                "operation": "ExecuteDataSet"
            },
            {
                "queryId": "MyQueries:MyQuery2",
                "operation": "ExecuteNonQuery"
            }
        ]
    }
    

    Note

    FoxDataRequestCollection 컬렉션이 JSON 으로 직렬화되면 각 FoxDataRequest 객체는 items 배열에 포함됩니다. FoxDataRequestCollection 컬렉션의 인덱서 속성을 참고하십시요.

SaveDataTable 관련 속성들

  • DataSet 속성

    SaveDataTable 메서드에서 저장할 데이터 테이블을 담는 DataSet 객체입니다. 이 속성이 지시하는 DataSet 객체에 여러 개의 DataTable 객체가 포함되어 있으면 첫번째 데이터 테이블 만이 사용됩니다.

    Information

    이 속성이 DataTable 이 아닌 DataSet 인 이유는 JSON 이 사용되기 이전 버전의 NeoDEEX 는 XML 기반의 직렬화만 사용되었을 때, DataTable 객체 단독으로 XML 직렬화가 불가능했기 때문입니다. 호환성 이유로 FoxDataRequest 객체는 여전히 DataSet 객체를 사용하고 있습니다.

    JSON 형태에서 DataSet 속성은 dataSet 속성으로 표현됩니다.

    {
        "queryId": "MyQueries:SelectQuery",
        ......
        "dataSet": {
            "Table1": [
                { "col1": "value1", "col2": 123, "$rowState": "Added" },
                { "col1": "value2", "col2": 456, "$rowState": "Modified" },
                { "col1": "value3", "col2": 789, "$rowState": "Deleted" }
            ]
        }
    }
    
  • InsertQueryId, UpdateQueryId, DeleteQueryId 속성

    이 속성들은 SaveDataTable 메서드가 데이터 테이블의 각 행을 삽입, 수정, 삭제할 때 사용할 Fox Query 를 지정합니다.

    JSON 형태에서 InsertQueryId, UpdateQueryId, DeleteQueryId 속성은 각각 insertQueryId, updateQueryId, deleteQueryId 속성으로 표현됩니다.

    1
    2
    3
    4
    5
    6
    7
    {
        "queryId": "MyQueries:SelectQuery",
        "insertQueryId": "MyQueries:InsertQuery",
        "updateQueryId": "MyQueries:UpdateQuery",
        "deleteQueryId": "MyQueries:DeleteQuery",
        ......
    }
    
  • SaveMode 속성

    SaveDataTable 메서드가 데이터 테이블의 각 행을 삽입, 수정, 삭제할 때 사용할 쿼리 수행 방식을 지정합니다. 이 속성은 FoxDataSaveMode 열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다. 디폴트 값은 LoopUpdate 입니다.

    • LoopUpdate : 변경된 각 행을 삭제, 수정, 삽입된 행으로 그룹화하여 반복문을 사용하여 업데이트 합니다.
    • BatchUpdate : DataAdapter.Update 메서드를 사용하여 배치 업데이트를 수행합니다.
    • GroupedBatchUpdate : 변경된 각 행을 삭제, 수정, 삽입된 행으로 그룹화하여 DataAdapter.Update 메서드를 사용하여 배치 업데이트를 수행합니다.

    각 모드의 상세한 작동 방식 및 고려 사항은 기본 사용법 문서의 SaveDataTable 메서드 항목을 참조하십시오.

    JSON 형태에서 SaveMode 속성은 saveMode 속성으로 표현됩니다.

    1
    2
    3
    4
    5
    {
        "queryId": "MyQueries:SelectQuery",
        "saveMode": "GroupedBatchUpdate",
        ......
    }
    

트랜잭션 관련 속성들

  • Transaction 속성

    Transaction 속성은 FoxDataRequest 객체가 수행하는 쿼리의 트랜잭션 모드를 지정합니다. 이 속성은 FoxDataTransactions 열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다. 디폴트 값은 None 입니다.

    • None : 트랜잭션을 사용하지 않습니다.
    • Local : 로컬 트랜잭션을 사용합니다.
    • Distributed : System.Transactions.TransactionScope 클래스를 사용하여 분산 트랜잭션을 사용합니다.

    Fox Data Service 의 트랜잭션 처리 방식에 대한 상세한 내용은 Fox Data Service 고급 사용법 문서에서 트랜잭션 항목을 참조하십시오.

    JSON 형태에서 Transaction 속성은 transaction 속성으로 표현됩니다.

    1
    2
    3
    4
    5
    {
        "queryId": "MyQueries:MyQuery",
        "transaction": "Local",
        ......
    }
    
  • TransactionTimeout 속성

    트랜잭션에 사용할 트랜잭션 타임 아웃(초)을 지정하는 정수형 옵션입니다. 기본 값은 60초 입니다.

    JSON 형태에서 TransactionTimeout 속성은 transactionTimeout 속성으로 표현됩니다.

    1
    2
    3
    4
    5
    6
    {
        "queryId": "MyQueries:MyQuery",
        "transaction": "Local",
        "transactionTimeout": 30,
        ......
    }
    
  • TransactionIsolation 속성

    트랜잭션에 사용할 트랜잭션 격리 수준을 지정하는 FoxDataTransactionIsolation 열거 타입 속성입니다. 기본 값은 ReadCommitted 입니다.

    JSON 형태에서 TransactionIsolation 속성은 transactionIsolation 속성으로 표현됩니다.

    1
    2
    3
    4
    5
    6
    {
        "queryId": "MyQueries:MyQuery",
        "transaction": "Local",
        "transactionIsolation": "Serializable",
        ......
    }
    

기타 속성

  • Diagnostics 속성

    Fox Data Service 진단을 위한 플래그 속성입니다. 이 속성은 FoxDataRequestDiagnostics 열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다.

    • None : 진단 기능을 사용하지 않습니다. 디폴트 값입니다.
    • LogId : Fox Data Service 가 쿼리를 수행할 때 생성하는 로그 항목들에 대해 생성하는 로그 ID 를 응답 객체의 LogId 속성에 반환하도록 요청합니다.
    • ServiceLog : Fox Data Service 가 쿼리를 수행할 때 생성하는 로그 항목들을 응답 객체의 ServiceLog 속성에 반환하도록 요청합니다.
    • PerformanceInfo : Fox Data Service 가 쿼리를 수행할 때 수집하는 성능 정보를 응답 객체의 PerformanceInfo 속성에 반환하도록 요청합니다.
    • DbProfileInfo : Fox Data Service 가 쿼리를 수행할 때 수집하는 DB Profile 정보를 응답 객체의 DbProfileInfo 속성에 반환하도록 요청합니다.
    • ForceRollback : Fox Data Service 가 쿼리를 수행할 때 트랜잭션을 강제로 롤백하도록 요청합니다. 이 옵션은 테스트 용도로만 사용해야 합니다.
    • SuppressPerfLogWrite : Fox Data Service 가 쿼리를 수행할 때 수집하는 성능 정보를 서버 측 로그에 기록하지 않도록 요청합니다.
    • SuppressDbProfileWrite : Fox Data Service 가 쿼리를 수행할 때 수집하는 DB 프로파일 정보를 서버 측 로그에 기록하지 않도록 요청합니다.

    JSON 형태에서 Diagnostics 속성은 diagnostics 속성으로 표현됩니다.

    1
    2
    3
    4
    5
    {
        "queryId": "MyQueries:MyQuery",
        "diagnostics": "LogId,ServiceLog,DbProfileInfo",
        ......
    }
    
  • ClientInfo 속성

    ClientInfo 속성은 클라이언트의 컴퓨터 이름, IP, MAC 주소 등을 포함하는 FoxClientInfo 객체를 담는 속성입니다. 이 속성은 Fox Web API 클라이언트가 서비스를 호출할 때 원격 서비스가 클라이언트에 대한 정보를 수집할 수 있도록 제공됩니다. 이 속성 값은 읽기 전용으로 FoxDataRequest 객체가 생성될 때 FoxClientInfo.Instance 싱글톤 정적 값으로 자동으로 채워집니다.

    다음은 Fox Data Service 가 생성하는 로그 항목에 ClientInfo 속성으로부터 수집한 클라이언트 정보를 보여 줍니다.

    >> Data Service Start: ExecuteDataSet  Requests=1  UserId=  ClientMachine=MYHOST  ClientIP=172.20.96.1  ClientMAC=0-15-5D-A3-23-4C
    ......
    

    JSON 형태에서 ClientInfo 속성은 clientInfo 속성으로 표현됩니다.

    ```json hl_lines="3-7" { "queryId": "MyQueries:MyQuery", "clientInfo": { "machineName": "MYHOST", "ipAddress": "172.20.96.1", "macAddress": "0-15-5D-A3-23-4C" } }

  • SerializeClientInfo 속성

    이 속성은 Fox Web API 클라이언트가 원격 서비스를 호출할 때 ClientInfo 속성에 담긴 클라이언트 정보를 직렬화하여 전송할 것인지 여부를 나타냅니다. 기본값은 true 입니다. 이 속성이 false 이면 ClientInfo 속성에 담긴 클라이언트 정보는 직렬화되지 않고 원격 서비스에 전달되지 않습니다.

    Fox Web API 클라이언트 클래스인 FoxDataServiceClient 클래스는 SendClientInfo 속성을 통해 이 속성 값을 변경합니다. 따라서 FoxDataRequest 객체의 SerializeClientInfo 속성은 FoxDataServiceClient.SendClientInfo 속성 값에 따라 자동으로 설정됩니다. 즉, SerializeClientInfo 속성은 Fox Web API 클라이언트를 사용할 때에는 직접 설정할 필요가 없으며 FoxDataServiceClient.SendClientInfo 속성을 통해 간접적으로 설정하면 됩니다.

    1
    2
    3
    4
    FoxDataServiceClient client = new FoxDataServiceClient();
    client.SendClientInfo = false; // 클라이언트 정보 직렬화하지 않음
    FoxDataRequest request = new FoxDataRequest("MyQueries:MyQuery");
    client.ExecuteDataSet(request); // request.SerializeClientInfo 속성은 false 로 설정됨
    

    이 속성은 Fox Web API 의 클라이언트에서만 참조되고 JSON 으로 직렬화되지 않습니다.

FoxDataRequestCollection 객체

FoxDataRequestCollection 객체는 여러 개의 FoxDataRequest 객체를 담는 리스트 스타일(IList<T>) 컬렉션입니다. Fox Data Service 의 ExecuteMultiple 메서드는 이 컬렉션을 입력으로 받아 여러 개의 쿼리를 한 번에 수행할 수 있습니다. FoxDataRequestCollection 객체는 다음과 같은 속성들을 통해 ExecuteMultiple 메서드 수행 시에 필요한 정보를 담을 수 있습니다.

컬렉션 기본 속성들

  • 인덱서 속성

    FoxDataRequestCollection 객체는 IList<T> 인터페이스를 구현하고 있으므로 인덱서를 통해 컬렉션에 포함된 FoxDataRequest 객체를 접근할 수 있습니다. ExecuteMultiple 메서드는 컬렉션에 포함된 각 FoxDataRequest 객체를 통해 순차적으로 쿼리를 수행하므로 컬렉션 내에서 각 FoxDataRequest 객체의 순서가 중요합니다. 따라서 컬렉션에 포함된 각 FoxDataRequest 객체는 쿼리를 수행할 순서대로 추가해야 합니다.

    FoxDataRequestCollection 객체는 다른 IList<T> 컬렉션과 같이 JSON 형태에서 items 속성의 배열로 표현됩니다.

    {
        "databaseName": "ProductDB",
        "items": [
            {
                "queryId": "MyQueries:MyQuery1",
                "operation": "ExecuteDataSet"
            },
            {
                "queryId": "MyQueries:MyQuery2",
                "operation": "ExecuteNonQuery"
            }
        ]
    }
    
  • DatabaseName 속성

    DatabaseName 속성은 ExecuteMultiple 메서드 수행 시에 데이터베이스에 어떻게 연결할 것인가를 결정하는 중요한 속성입니다. 이 속성에 null 이 아닌 값이 사용되면, ExecuteMultiple 메서드는 주어진 이름의 연결 문자열을 사용하여 데이터베이스에 연결하고 이 연결을 통해 컬렉션에 포함된 모든 FoxDataRequest 객체의 쿼리를 수행하고 모든 쿼리의 수행을 종료한 후에 연결을 닫습니다. 개별 FoxDataRequest 객체의 DatabaseName 속성은 무시됩니다.

    다음 예제 코드는 ProductDB 라는 이름의 연결 문자열을 사용하여 컬렉션에 포함된 두 개의 쿼리를 수행하는 예제입니다.

    1
    2
    3
    4
    5
    6
    7
    // 생성자를 통해 DatabaseName 속성 지정
    FoxDataRequestCollection requests = new("ProductDB")
    {
        new FoxDataRequest("MyQueries:MyQuery1") { Operation = FoxDataOperations.ExecuteDataSet },
        new FoxDataRequest("MyQueries:MyQuery2") { Operation = FoxDataOperations.ExecuteNonQuery }
    };
    service.ExecuteMultiple(requests);
    

    Note

    빈 문자열("") 혹은 String.Empty 값이 사용되면 서비스의 구성 설정에서 디폴트 연결 문자열을 사용합니다. 상세한 내용은 Fox DB Access 의 연결 정보 선택 항목을 참고하십시오.

    만약 이 속성이 지정되지 않거나 null 값이 사용되면 ExecuteMultiple 메서드는 FoxDataRequestCollection 에 포함된 FoxDataRequest 객체의 DatabaseName 속성 값을 사용하여 데이터베이스에 연결하고 쿼리를 수행하며 연결을 닫습니다. 즉, FoxDataRequest 객체 별로 별도의 연결을 사용합니다.

    다음 예제 코드는 첫 번째 쿼리는 ProductDB 라는 이름의 연결 문자열을 사용하고 두 번째 쿼리는 StockDB 라는 이름의 연결 문자열을 사용하여 각각 별도의 연결을 통해 쿼리를 수행하는 예제입니다.

    1
    2
    3
    4
    5
    6
    7
    // DatabaseName 속성이 지정되지 않음
    FoxDataRequestCollection requests = new()
    {
        new FoxDataRequest("MyQueries:MyQuery1") { Operation = FoxDataOperations.ExecuteDataSet, DatabaseName = "ProductDB" },
        new FoxDataRequest("MyQueries:MyQuery2") { Operation = FoxDataOperations.ExecuteNonQuery, DatabaseName = "StockDB" }
    };
    service.ExecuteMultiple(requests);
    

    이 속성의 값은 ExecuteMultiple 메서드가 트랜잭션 하에서 여러 개의 쿼리를 수행할 때에도 영향을 미칩니다. 로컬 트랜잭션을 사용하고자 한다면 반드시 이 속성에 null 이 아닌 값을 지정하여 컬렉션에 포함된 모든 쿼리가 동일한 연결을 사용하도록 해야 합니다. 한편 분산 트랜잭션은 여러 연결이 사용되어도 트랜잭션이 적용되므로 이 속성이 반드시 값을 지정할 필요는 없습니다.

    JSON 형태에서 DatabaseName 속성은 FoxDataRequest 객체와 동일하게 databaseName 속성으로 표현됩니다.

  • ThrowException 속성

    예외가 발생했을 때 FoxDataServiceException 예외를 발생시켜 호출자에게 전파할 것인지 여부를 나타냅니다. 기본값은 true 입니다.

    이 값이 false 이고 예외가 발생하면 ExecuteMultiple 메서드는 FoxDataResponseCollection 객체의 Success 속성을 false 로 설정하고 ErrorInfo 속성에 예외 정보를 포함하여 반환합니다. 예외 정보를 담고 있는 FoxServiceErrorInfo 객체의 Index 속성은 컬렉션 내의 몇 번째 쿼리를 수행하는 도중에 예외가 발생했는지를 나타냅니다.

    예외 처리에 대한 상세한 내용은 Fox Data Service 예외 처리 항목을 참조하십시오.

    JSON 형태에서 ThrowException 속성은 FoxDataRequest 객체와 동일하게 throwException 속성으로 표현됩니다.

  • ContinueOnError 속성

    ExecuteMultiple 메서드 수행 중 예외가 발생한 경우, 나머지 쿼리들을 계속 수행할 것인지 여부를 나타냅니다. 기본값은 false 입니다. 상세한 내용은 Fox Data Service 예외 처리에서 Continue On Error 항목을 참조하십시오.

    JSON 형태에서 ContinueOnError 속성은 continueOnError 속성으로 표현됩니다.

    {
        "throwException": false,
        "continueOnError": true,
        "items": [
            {
                "queryId": "MyQueries:MyQuery1",
                "operation": "ExecuteDataSet"
            },
            {
                "queryId": "MyQueries:MyQuery2",
                "operation": "ExecuteNonQuery"
            }
        ]
    }
    

컬렉션 트랜잭션 관련 속성들

  • Transaction 속성

    Transaction 속성은 FoxDataRequestCollection 컬렉션에 포함된 모든 FoxDataRequest 객체가 수행하는 쿼리의 트랜잭션 모드를 지정합니다. 이 속성은 FoxDataTransactions 열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다. 디폴트 값은 None 입니다.

    • None : 컬렉션 전체에 적용할 트랜잭션을 지정하지 않고, 개별 FoxDataRequest 객체의 Transaction 속성 값에 따라 트랜잭션을 적용합니다.
    • Local : 컬렉션 전체에 로컬 트랜잭션을 사용합니다.
    • Distributed : 컬렉션 전체에 System.Transactions 기반 분산 트랜잭션을 사용합니다.

    Fox Data Service 의 트랜잭션 처리 방식에 대한 상세한 내용은 Fox Data Service 고급 사용법 문서에서 트랜잭션 항목을 참조하십시오.

    JSON 형태에서 Transaction 속성은 FoxDataRequest 객체와 동일하게 transaction 속성으로 표현됩니다.

  • TransactionTimeout 속성

    컬렉션 전체에 적용되는 트랜잭션을 사용하는 경우에만 적용되는 트랜잭션 타임 아웃(초)을 지정하는 정수형 옵션입니다. 기본 값은 60초 입니다. 다수의 쿼리를 수행하는 경우, 트랜잭션에 소요되는 시간이 길어질 수 있으므로 기본값을 조정해야 할 필요가 있습니다.

    JSON 형태에서 TransactionTimeout 속성은 FoxDataRequest 객체와 동일하게 transactionTimeout 속성으로 표현됩니다.

  • TransactionIsolation 속성

    컬렉션 전체에 적용되는 트랜잭션을 사용하는 경우에만 적용되는 트랜잭션 격리 수준을 지정하는 FoxDataTransactionIsolation 열거 타입 속성입니다. 기본 값은 ReadCommitted 입니다.

    JSON 형태에서 TransactionIsolation 속성은 FoxDataRequest 객체와 동일하게 transactionIsolation 속성으로 표현됩니다.

컬렉션 기타 속성

  • Diagnostics 속성

    ExecuteMultiple 메서드 수행 시에 적용되는 진단 플래그 속성입니다. 이 속성은 FoxDataRequest 객체의 Diagnostics 속성과 동일하게 FoxDataRequestDiagnostics 열거 타입을 사용하며 기본값은 None 입니다.

    이 속성에 사용할 수있는 값들은 FoxDataRequest 객체의 Diagnostics 속성을 참고하십시요. 또한 이 속성을 통해 로그 ID, 요청 시 로그, 요청 시 성능 정보, 요청 시 DB 프로파일 정보 등을 사용하는 상세한 방법에 대해서는 Fox Data Service 고급 사용에서 로깅 항목, 성능 측정 항목을 참조하십시오.

    JSON 형태에서 Diagnostics 속성은 diagnostics 속성으로 표현됩니다.

    {
        "diagnostics": "LogId,ServiceLog,DbProfileInfo",
        "items": [
            {
                "queryId": "MyQueries:MyQuery1",
                "operation": "ExecuteDataSet"
            },
            {
                "queryId": "MyQueries:MyQuery2",
                "operation": "ExecuteNonQuery"
            }
        ]
    }
    
  • ClientInfo 속성

    FoxDataRequest 객체의 ClientInfo 속성과 동일하게 클라이언트 정보를 담는 FoxClientInfo 객체를 포함하는 속성입니다. 상세한 내용은 FoxDataRequest 객체의 ClientInfo 속성을 참고하십시요.

  • SerializeClientInfo 속성

    FoxDataRequest 객체의 SerializeClientInfo 속성과 동일하게 클라이언트 정보를 직렬화하여 전송할 것인지 여부를 나타내는 속성입니다. 상세한 내용은 FoxDataRequest 객체의 SerializeClientInfo 속성을 참고하십시요.

팩터리 클래스

FoxDataRequest 객체와 FoxDataRequestCollection 객체는 모두 생성자를 통해 생성할 수 있습니다. 하지만 때때로 생성자만으로는 충분하지 않은 경우가 있습니다. 예를 들어 클라이언트에서 전반적인 모든 쿼리 수행에 대해 성능 측정이 필요하거나, DB 프로파일 정보를 수집해야할 수도 있습니다. 이 때 수많은 클라이언트 코드들에서 두 객체의 생성 코드에 Diagnostics 속성을 일일이 설정하는 것은 번거롭고 실수할 가능성이 있습니다.

이러한 상황에 대비하기 위해 Fox Data Service 는 FoxDataRequestFactory 클래스와 FoxDataRequestCollectionFactory 클래스를 제공합니다. 이 두 클래스에서 파생하여 Create 메서드를 오버라이드 하고 이 팩터리 객체를 FoxDataRequest.Factory 혹은 FoxDataRequestCollection.Factory 속성에 등록할 수 있습니다. 이제 FoxDataRequest.Create 메서드 혹은 FoxDataRequestCollection.Create 메서드를 사용하면 이들 팩터리 클래스를 통해 객체를 생성하게 됩니다.

다음은 FoxDataRequestFactory 클래스를 상속하여 Create 메서드를 오버라이드 하는 간단한 FoxDataRequest 팩터리를 구현한 예제입니다. SimpleRequestFactory 클래스는 진단 모드를 설정하여 팩터리를 통해 생성되는 모든 FoxDataRequest 객체에 ServiceLog, PerformanceInfo 등의 진단 플래그를 설정할 수 있도록 구성되어 있습니다.

internal class SimpleRequestFactory(bool useDiagMode = false) : FoxDataRequestFactory
{
    public bool DiagnosticsMode { get; set; } = useDiagMode;

    public FoxDataRequestDiagnostics Diagnostics { get; set; } = FoxDataRequestDiagnostics.ServiceLog;

    // 팩터리 메서드 재정의
    public override FoxDataRequest Create(string? queryId, string? databaseName = null, IDictionary<string, object?>? parameters = null, DataSet? dataSet = null)
    {
        FoxDataRequest request = base.Create(queryId, databaseName, parameters, dataSet);
        if (this.DiagnosticsMode == true)
        {
            request.Diagnostics = this.Diagnostics;
        }
        else
        {
            request.Diagnostics = FoxDataRequestDiagnostics.None;
        }
        return request;
    }
}

FoxDataRequestFactory 클래스에서 파생된 팩터리는 FoxDataRequest.Factory 속성에 등록하여 FoxDataRequest.Create 메서드를 통해 생성되는 모든 요청 객체에 다음과 같이 일괄적으로 적용할 수 있습니다.

1
2
3
4
5
// 신규 팩터리 등록
FoxDataRequest.Factory = new SimpleRequestFactory(true);
// 팩터리를 통해 FoxDataRequest 객체 생성
FoxDataRequest request = FoxDataRequest.Create("MyQueries:MyQuery");
client.ExecuteDataSet(request);

Note

물론, 다른 팩터리 패턴을 사용하여 FoxDataRequest 객체를 생성하도록 구현할 수도 있습니다. 하지만 FoxDataRequest.Create 메서드는 Fox Web API 클라이언트에서 FoxDataRequest 객체를 생성할 때 내부적으로 사용하므로 이 메서드를 통해 생성되는 모든 요청 객체에 일괄적으로 적용할 수 있습니다. 예를 들어, Fox Web API 클라이언트의 ExecuteDataSet, ExecuteNonQuery 등 메서드는 FoxDataRequest 객체 외에도 쿼리 ID, 데이터베이스 이름, 파라미터 등을 인자로 받아 내부적으로는 FoxDataRequest.Create 메서드를 호출하여 요청 객체를 생성합니다.

FoxDataRequest.Factory = new SimpleRequestFactory(true);
client.ExecuteNonQuery("MyQueries:MyQuery");    // 내부적으로 팩터리 사용

Summary

FoxDataRequest 객체와 FoxDataRequestCollection 객체는 Fox Data Service 를 호출하기 위해 다양한 정보를 포함합니다. 핵심적인 Fox Query ID, 데이터베이스 이름, 파라미터, 데이터셋 등의 정보를 포함하며, 필요에 따라 진단 정보도 설정할 수 있습니다. 이러한 객체들은 생성자뿐만 아니라 팩터리 클래스를 통해서도 생성할 수 있으며, 팩터리를 사용하면 일관된 방식으로 객체를 초기화할 수 있습니다.