2013-12-22 3 views
0

Я использую Code First. У меня класс класса и класс голосования. Темы имеют голоса.Код Первые данные Аннотации для свойств Backpointer

public class Topic 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public List<Vote> Votes { get; set; } 
} 

Класс голосования указывает на тему, чтобы я мог получить тему данного голосования в коде.

public class Vote 
{ 
    public Guid Id { get; set; } 
    public bool IsUp { get; set; } 
    public DateTime WhenVoted { get; set; } 
    public Topic Topic { get; set; } 
} 

Когда я запрашиваю как var topics = context.Topics.Include("Votes");, я получаю переполнение стека, но если удалить ссылку на тему из проголосовать, он загружает штраф. Я считаю, что есть аннотация данных, которую я могу добавить, чтобы указать, что они представляют одну и ту же взаимосвязь. Может ли кто-нибудь указать мне в правильном направлении, если это так?

В стеке вызовов это повторяется снова и снова, что, по-видимому, указывает на то, что сериализатор пытается рекурсивно отобразить рекурсивные отношения. Поэтому, возможно, говорить, что объект Vote не сериализует свойство Topic, здесь правильный ответ, но если есть ответ аннотации данных, я хотел бы знать, что это такое.

System.Runtime.Serialization.dll!System.Runtime.Serialization.ClassDataContract.WriteXmlValue(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.Runtime.Serialization.XmlObjectSerializerWriteContext context) Unknown 
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle declaredTypeHandle) Unknown 
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle declaredTypeHandle) Unknown 
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) Unknown 
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) Unknown 
+0

аннотации http://msdn.microsoft.com/en-us/data/jj591583, включают в себя стек, чтобы другие могли помочь –

+0

Как база данных сначала обрабатывает такие отношения при автогенерации .cs? – Langdon

ответ

0

Это было плохо сформулированный вопрос в том, что я предполагал, ложно, что моя проблема может быть исправлена ​​с аннотациями данных. Ответ на мой фактический вопрос заключается в использовании аннотации данных InverseProperty для создания обратных ссылок указателей (A имеет набор B, B имеет родительское свойство A). Это, однако, не решило проблему, поскольку я сериализовал полную объектную модель, которая имела циклические ссылки в образце кода. Чтобы обойти это, я пошел по пути создания моей модели, чтобы обеспечить правильную сериализацию с атрибутами DataContract, DataMember и ReferenceType, чтобы закончить круговую ссылку, и, хотя это сработало, тот факт, что я должен был это сделать, был ясным указание Я сериализую что-то, не предназначенное для сериализации. Вместо этого создавалась модель, специально предназначенная для сериализации, сопоставляла мой домен с этим и сериализовала ее вместо стандартного сериализатора json/xml по умолчанию, и все было разработано просто hunky dory.

Смежные вопросы