Этот заголовок довольно полный.Позвольте мне попытаться быть максимально ясным ...
У меня есть служба WCF REST, написанная на .NET 4, которая использует инфраструктуру сущностей для извлечения некоторых данных из SQL Server в список объектов.Затем объекты возвращаются клиенту в виде XML.Проблема в том, что в XML есть ссылки друг на друга из-за отношений моей модели.
Вот некоторый код, помогающий проиллюстрировать проблему:
Моя модель: http://bara.stardock.com/images/activity_model.png
Класс Activity, который обрабатывает логику обслуживания:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class Activities : IActivities
{
public ActivitiesList GetActivities(string titleId, string accountId, string numToReturn)
{
stardockActivitiesEntities sdActivitiesDb = new stardockActivitiesEntities();
int accountIdInt = int.Parse(accountId);
List<Activity> items = (from a in sdActivitiesDb.Activities
join ab in sdActivitiesDb.ActivityBridges
on a.ActivityID equals ab.ActivityID
where ab.AccountID == accountIdInt
select a).ToList();
ActivitiesList list = new ActivitiesList(items);
return list;
}
}
Интерфейс для вышеуказанного класса:
[ServiceContract]
public interface IActivities
{
[OperationContract]
[WebGet(UriTemplate = "{titleId}/accounts/{accountId}/limits/{numToReturn}")]
ActivitiesList GetActivities(string titleId, string accountId, string numToReturn);
}
Класс Activity автоматически создается структурой сущностей на основе моей модели для таблицы Activity.Однако я расширил этот класс, создав объект ActivityList:
[XmlRoot(Namespace = "http://schemas.datacontract.org/2004/07/Stardock.CVP.Stats")]
public partial class Activity
{
}
[XmlRoot(Namespace = "http://schemas.datacontract.org/2004/07/Stardock.CVP.Stats")]
[DataContract(IsReference=false)]
public class ActivitiesList
{
[DataMember]
public List<Activity> Activities { get; set; }
public ActivitiesList()
{
Activities = new List<Activity>();
}
public ActivitiesList(List<Activity> list)
{
Activities = new List<Activity>();
foreach (Activity item in list)
{
Activities.Add(item);
}
}
public void Add(Activity a)
{
Activities.Add(a);
}
}
Итак, чтобы снова объяснить мою проблему, мой XML, вместо того, чтобы просто возвращать список Activity, как следует, вместо этого возвращает списокДеятельность с некоторыми действиями, ссылающимися на другие действия, которые находятся в пределах основных действий.Это звучит странно, но посмотрите на изображения ниже:
Возвращенный XML: http://bara.stardock.com/images/activity_xml1.png
Упражнение со ссылкой «i8» относится к другому действию, которое фактически находится внутри действия сid "i2": http://bara.stardock.com/images/activity_xml2.png
Мой вопрос: как я могу удалить все эти дополнительные отношения из объекта Activity?Я бы предпочел, чтобы это был просто список Activity без вложенных ActivityType, EntityKey и т. Д., Которые автоматически генерируются структурой сущностей.
Надеюсь, я достаточно объяснил сам.А если нет, дайте мне знать, какие еще детали вы хотели бы видеть, и я предоставлю их.
Бара