Entity Framework は、私のデータ モデルから (Entities.tt
テンプレートを使用して) POCO クラスのセットを生成しましたが、それらはどこまでも正常に動作しますが、循環参照 (Airplane
クラスには のプロパティがあり public virtual List<License> Licenses
、各License
クラスには相互Airplane
プロパティがあります) があるため、それらはWeb API リクエストの XML にシリアル化されません。
POCO クラスに[DataContract]
および[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
、同じプロパティを2回宣言することはできません.それが彼らの存在の理由です。Airplane
[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]
または注釈を読み取っていません。[DataContract]
私は何時間も Web と SO をサーフィンしてきましたが、まだ解決策を見つけていません。Olav と Stephen は、私は DTO を使用するべきだとコメントしています...しかし、T4 テンプレートを書き直さなければならない場合、POCO を生成するポイントは何ですか?
どんな援助でも大歓迎です。
EDIT1::明確にするための主要なリワーク。