Коллекция возвращает тип OperationContract и как добавить в список DataContracts?

У меня есть класс Business Domain Object (BDO):

public class BDO_LIST_DEPARTMENTS
{
    public int DEPARTMENT_ID { get; set; }
    public string DEPARTMENT_NAME { get; set; }
}

И тогда у меня есть DataContract учебный класс:

[DataContract]
public class DC_LIST_DEPARTMENTS
{
    [DataMember]
    public int DEPARTMENT_ID { get; set; }

    [DataMember]
    public string DEPARTMENT_NAME { get; set; }
}

И на моем уровне обслуживания я пытался преобразовать BDO в DataContract а затем вернуть список этого DataContract, являясь типом возврата OperationContract:

[OperationContract]
    IList<DC_LIST_DEPARTMENTS> GetAllDepartments();

Вот моя первоначальная попытка в моем слое обслуживания:

public IList<DC_LIST_DEPARTMENTS> GetAllDepartments()
    {
        DC_LIST_DEPARTMENTS DCDepartment = new DC_LIST_DEPARTMENTS();
        IList<DC_LIST_DEPARTMENTS> DCListOfDepartments = new List<DC_LIST_DEPARTMENTS>();
        ICollection<BDO_LIST_DEPARTMENTS> BDOListOfDepartments = Bal.GetAllDepartments();

        foreach (BDO_LIST_DEPARTMENTS BDODepartment in BDOListOfDepartments)
        {
              DCDepartment.DEPARTMENT_ID = BDODepartment.DEPARTMENT_ID;
              DCDepartment.DEPARTMENT_NAME = BDODepartment.DEPARTMENT_NAME;
              DCListOfDepartments.Add(DCDepartment);
        }

        return DCListOfDepartments;
    }

Как видите, я попытался добавить один DataContract к IList<DataContract>, но когда я делаю это, он меняет все остальные элементы этого списка на тот же DataContract с такими же деталями.

Поэтому мой вопрос, каков правильный тип возврата для OperationContract как мне вернуть список DataContract класс и как мне добавить в этот список, не изменяя данные всех других элементов в списке?

1 ответ

Решение

Определить контракт сбора данных

[CollectionDataContract]
public class DC_LIST_DEPARTMENTS_LIST : List<DC_LIST_DEPARTMENTS> {
  ...
}

и использовать этот контракт данных сбора в качестве возвращаемого типа метода операции.

public DC_LIST_DEPARTMENTS_LIST  GetAllDepartments() {
   ...
}

и вот модифицированная реализация для метода обслуживания:

public DC_LIST_DEPARTMENTS_LIST   GetAllDepartments() {

            IList<DC_LIST_DEPARTMENTS> DCListOfDepartments = new List<DC_LIST_DEPARTMENTS>();
            ICollection<BDO_LIST_DEPARTMENTS> BDOListOfDepartments = Bal.GetAllDepartments();

            foreach (BDO_LIST_DEPARTMENTS BDODepartment in BDOListOfDepartments) {
                DC_LIST_DEPARTMENTS DCDepartment = new DC_LIST_DEPARTMENTS() {
                    DEPARTMENT_ID = BDODepartment.DEPARTMENT_ID,
                    DEPARTMENT_NAME = BDODepartment.DEPARTMENT_NAME
                };
                DCListOfDepartments.Add(DCDepartment);
            }

            return DCListOfDepartments;
        }
Другие вопросы по тегам