WCF Data Services (現在は .NET 4 - ある時点で WCF Data Services 5 にアップグレードする予定) を使用して、SQL DB からいくつかのデータを公開しています。そのデータをサーバー側でパブリック ドメイン モデルに投影し、Reflection プロバイダーを介してデータを公開します。
これはすべて正常に機能しますが、最近ドメイン モデルにシンジケーションの詳細を追加したことを除けば、IE などのフィード ビューで見栄えがよくなります。これが私がやったことのようなものです: -
[DataServiceKey("ID")]
[EntityPropertyMapping("Name", SyndicationItemProperty.Title, SyndicationTextContentKind.Plaintext, false)]
public class Customer
{
public String Name { get; set; }
public String ID { get; set; }
public Boolean IsActive { get; set; }
}
これは、フィードにシンジケート フィールドが正しく設定されていて、IE に適切に表示される限り、正しく機能します。さらに、Name フィールドはデータの XML に直接表示されなくなりました。代わりに、コンソールまたは Silverlight アプリケーションでクライアント側の参照を取得すると、プロキシ クラスにはそのような属性があります (他の属性は省略しました):-
[global::System.Data.Services.Common.EntityPropertyMappingAttribute("Name", System.Data.Services.Common.SyndicationItemProperty.Title, System.Data.Services.Common.SyndicationTextContentKind.Plaintext, false)]
[global::System.Data.Services.Common.DataServiceKeyAttribute("ID")]
public partial class Customer : global::System.ComponentModel.INotifyPropertyChanged { // etc. }
INotifyPropertyChanged を無視すると、主なものは SyndicationItemProperty であり、クライアント側のプロキシがオブジェクトを正しく再水和できると想定しています。ただし、ASP .NET アプリケーション (WebForms または MVC) では、代わりに次のような動作が得られます。
[global::System.Data.Services.Common.DataServiceKeyAttribute("ID")]
public partial class LegalEntity { // etc. }
つまり、キー属性は正しく生成されますが、シンジケーション タイトル属性は生成されないため、クライアントは Name プロパティをハイドレートする方法を知りません。代わりに、null として返されます。シンジケーションをオフにすると、すべて機能します。
これは、コードを生成するテンプレートが VS のプロジェクト タイプごとに異なり、シンジケーションをサポートしない MVC のテンプレートに問題があることを示唆しているように思えます。
手動で部分クラスを作成し、それらを追加の属性で装飾する (またはシンジケーションをオフにする) ことに頼らずに、どうすればこれを回避できますか?
続いて追加:
違いは、ASP .NET プロジェクトの .datasvcmap ファイルに次の XML がないことです。
<Parameters>
<Parameter Name="UseDataServiceCollection" Value="true" />
<Parameter Name="Version" Value="2.0" />
</Parameters>
それを追加すると、問題が解決するようです。残っている問題は、なぜ自動的に追加されないのかということです。
ありがとう