反向指针属性的代码优先数据批注



我正在使用代码优先。 我有一个主题课和一个投票课。 主题有投票。

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

这是一个措辞糟糕的问题,因为我错误地认为我的问题可以通过数据注释来解决。 我的实际问题的答案是使用 InverseProperty 数据注释来创建反向指针引用(A 的集合为 B,B 的父属性为 A)。 但是,这并没有解决问题,因为我正在序列化一个在代码示例中具有循环引用的完整对象模型。 为了解决这个问题,我沿着设置模型的道路走下去,以使用 DataContract、DataMember 和 ReferenceType 属性强制实施正确的序列化以结束循环引用,虽然这有效,但我必须这样做的事实清楚地表明我正在序列化一些不适合序列化的东西。 相反,创建了一个专门用于序列化的模型,将我的域映射到该模型,并使用默认的 json/xml 序列化程序对其进行序列化,一切都变得笨拙。

最新更新