Коллекция возвращает тип 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;
}