none
サービス参照におけるEntityクラスの差し替え RRS feed

  • 質問

  • [概要]
     LightSwitchで作成されたサーバーに対し、WPFアプリケーションからサービス参照をしています。
     自動生成されるEntityクラスにプロパティやメソッドを追加するため、派生クラスを使おうと考えています。
     しかし、更新動作にて、これがうまくいきません。

    [状況]
    ①自動生成されるエンティティクラス(Bookmarkクラス)を継承した、新しいクラスを生成し、独自のプロパティを追加しました。

    ②自動生成されるApplicationDataの機能を拡張するため、WPFアプリケーションに、新しいファイルを追加し、public partial class ApplicationData を宣言しました。

    ③ApplicationDataに対し、下記のように追加しました。
            partial void OnContextCreated()
            {
                this.ResolveName = new global::System.Func<global::System.Type, string>(this.ResolveNameFromType2);
                this.ResolveType = new global::System.Func<string, global::System.Type>(this.ResolveTypeFromName2);
            }
     ResolveNameFromType2とResolveTypeFromName2を実装し、①のクラスを利用するようにしました。(名前とTypeの変換)
     この時点で、参照の動作は成功しています。(クエリの結果に独自クラスが格納されることを確認しました。)
     
    ④更新系(insert)のコードを下記のように作成しました。
        Bookmark bookmark = new Bookmark();
        bookmark.Name = "test";
        applicationData.AddToBookmarkSet(bookmark);
        applicationData.SaveChanges();
     なお、Bookmarkクラスは、①で宣言した、自動生成されたServiceReference.Bookmarkを継承した独自クラスです。

    ⑤このコードを実行すると、System.Data.Services.Client.DataServiceClientExceptionが発生します。
     メッセージは、"プロパティ 'Context' は型 'LightSwitchApplication.Bookmark' に存在しません。型で定義されているプロパティ名のみ使用してください。"です。
     例外の場所は、"場所 System.Data.Services.Serializers.ODataMessageReaderDeserializer.Deserialize(SegmentInfo segmentInfo)&#xD;"になります。
     なお、"Context"は、①で作成されたクラスに追加したプロパティです。

    [質問内容]
     おそらく、WPFアプリケーション側で定義した、エンティティクラスに対し、該当プロパティをシリアライズさせない手段があると考えております。
     手段のご提供をお願いいたします。

    2014年11月2日 12:43