0

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::明確にするための主要なリワーク。

4

1 に答える 1