Entity Framework 已经从我的数据模型(使用模板)生成了一组 POCO 类,Entities.tt
它们可以正常工作 - 但是因为它们具有循环引用(Airplane
类具有 的属性 public virtual List<License> Licenses
,并且每个License
类都有互惠的Airplane
属性)它们不会为我的 Web API 请求序列化为 XML。
[DataContract]
如果我用和属性注释 POCO 类,[DataMember]
那么一切正常 - 但如果类由模板重新生成,这些更改就会丢失 - 也就是任何时候对 edmx 进行更改。
#region POCO classes generated by the EF T4 template
[DataContract] // manually added and LOST if template regenerates this class
public partial class Airplane
{
[DataMethod] // also LOST if regenerated
public int AirplaneId { get; set; }
...
public List<Certification> Certifications{ get; set; }
}
public partial class Certification
{
public int CertificationId { get; set; }
public string CertificationAuthority { get; set; }
public Airplane Airplane { get; set; }
}
#endregion
我已经尝试创建一个“伙伴”public partial class Airplane
并对其进行注释,但是您不能两次声明相同的属性 - 所以我更进一步,Airplane
用 a注释伙伴[MetadataType(typeof(Airplane_Metadata))]
,然后注释元数据类 - 据我所知这是它们存在的全部原因。
[MetadataType(typeof(Airplane_metadata))]
[DataContract] // <-- This actually works, but I can't add [DataMethod]s here
public partial class Airplane{}
public partial class Airplane_metadata
{
[DataMethod] // NONE of the [Data...] tags are recognized by the serializer
public int AirplaneId { get; set; }
...
}
它不起作用。序列化程序没有从 MetadataType 类中读取[DataMember]
or[DataContract]
注释。
我已经在网上冲浪了几个小时,但我还没有找到解决方案。Olav 和 Stephen 评论说我应该使用 DTO……但是如果我只需要重新编写它们,那么让 T4 模板生成 POCO 有什么意义呢?
任何帮助将不胜感激。
EDIT1::为清晰起见进行重大返工。