1

WCF Data Servicesからのデータ量を減らすために、私は投影法を使用します。

Linqクエリは次のようになりました。

...
    _ctx.Files.Select(x => new FileProjection() { Id=x.Id, Name = x.Name });
...

[DataServiceKey("Id")]
public class FileProjection : ViewModelBase
{
    private string _name;

    public Guid Id { get; set; }
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            NotifyOfPropertyChange(() => Name);
        }
    }

    public string MyCustomProperty { get; set; }
}

FileProjectionクラスには、ファイルエンティティモデルには存在しない追加のプロパティがあります。

データを取得している間は正常に動作します。しかし、Nameを更新しようとすると、SaveChanges内で例外が発生しました。

追加情報:プロパティ「MyCustomProperty」はタイプ「DataAccessLayer.Context.File」に存在しません。タイプによって定義されたプロパティ名のみを使用するようにしてください。

SaveChanges中にMyCustomPropertyを無視する方法はありますか?

または、XXXProjectionクラスにカスタムパブリックプロパティを含めるべきではありませんか?

クライアントはSilverlightアプリ、WCF Data Services v5.0.1、oDatav3です。

4

3 に答える 3

3

現在、これを行う唯一の方法は、プロパティを internal または private にすることです。すべてのパブリック プロパティがシリアル化され、認識されない場合、サーバーは失敗します。

または、Phani による回避策を使用できます: http://blogs.msdn.com/b/phaniraj/archive/2008/12/11/customizing-serialization-of-entities-in-the-ado-net-data-services -client-library.aspx .

于 2012-07-20T15:15:32.450 に答える
0

私の場合のようにプライベートまたは内部がうまくいかない場合は、代わりにメソッドを使用できます。

public string GetName()
public void SetName(string value)

これらのメソッドはシリアル化を無視し、クラス ライブラリ間で状態を維持できます。

于 2014-10-19T18:09:26.453 に答える
0

以前の回避策 (イベントのイベント ハンドラーを使用DataServiceContext.WritingEntity) の問題は、Atom でのみ機能し、JSON では機能しないことです。

WCF Data Services Client と OData Client の新しいバージョンは、JSON と ATOM の両方で機能するパイプライン イベント インターセプトをサポートするようになりました。詳細はこちら:

http://blogs.msdn.com/b/odatateam/archive/2013/07/26/using-the-new-client-hooks-in-wcf-data-services-client.aspx

于 2014-09-19T07:26:20.290 に答える