1

wcfサービスからカスタムクラスを返そうとしています。私のコードは以下のとおりで、エラーが発生します。

サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは次のとおりです。'タイプ'DealerModel'のプロパティ'UserList'は有効なプロパティではありません。タイプがプリミティブのコレクションまたは複合タイプであるプロパティはサポートされていません。詳細については、サーバーログを参照してください。例外スタックトレースは次のとおりです。

私は以下のようなjson値を取得しようとしています。

<Dealer>
        <DealerName/>
        <DealerAdress/>
        <Users>
              <FirstName/>
              <LastName/>
              <FirstName/>
              <LastName/>
        </Users>
</Dealer>

私のコード

using System;
using System.Linq;
using System.Data.Objects;
using System.Data.Objects.DataClasses;

public class DataModel:IDisposable
{
    private xModel.xEntities _dbContext = new xSocialModel.xEntities();

    public DataModel()
    {
        Users = from e in _dbContext.Users
                select new UserModel
                {
                    UserID = e.UserID,
                    Firstname = e.Firstname,
                    Lastname = e.Lastname
                };

        Dealers = from e in _dbContext.Dealers
                  select new DealerModel
                  {
                      DealerID = e.DealerID,
                      DealerName = e.Name,
                      DealerAddress = e.Address,
                      UserList = e.Users
                  };

    }

    /// <summary>Returns the list of users.</summary>
    public IQueryable<UserModel> Users { get; private set; }

    public IQueryable<DealerModel> Dealers { get; private set; }


    void IDisposable.Dispose()
    {
        _dbContext.Dispose();
    }
}



    using System;
    using System.Data.Services.Common;
    using System.Runtime.Serialization;
    using System.Collections.Generic;
    using System.ServiceModel;
    using System.Data.Objects.DataClasses;
    using System.Linq;

    /// <summary>Represents a User.</summary>

    [DataServiceKey("UserID")]
    public class UserModel
    {
        public Guid UserID { get; set; }

        public string Firstname { get; set; }

        public string Lastname { get; set; }

    }


    [DataServiceKey("DealerID")]
    public class DealerModel
    {
        public Guid DealerID { get; set; }

        public string DealerName { get; set; }

        public string DealerAddress { get; set; }

        **public EntityCollection<xModel.User> UserList { get; set; }**

    }
4

1 に答える 1

0

これも大変でした。投影は、RIAサービスが使用したほどうまく機能していないようです。先に進み、EntityFrameworkを使用していると仮定します。これを行うために私が見つけた唯一の方法は、edmxに複合型を作成することです。

これを行うには、EDMXを開き、右側のペインでモデルブラウザを選択します。[モデル]ノードの下に[複合タイプ]が表示されます。右クリックして[複合タイプの作成]を選択します。同じウィンドウで、タイプに名前を付けて、既定のタイプのさまざまなプロパティを指定できます。

あなたの質問から、あなたはリストであるプロパティを持っているようです。他のエンティティを含むプロパティを使用して、これらの複合型を作成できませんでした。私がそれを理解できなかったというだけでは不可能だと言っているのではありません。

次に、DataServiceで、新しい複合型の戻り型を使用してサービスメソッドを作成します。サービスメソッドでは、他のエンティティと同じように、射影を使用してオブジェクト(またはリスト)を埋め、それを返します。フロントエンドでは、エンティティではなくサービスメソッドのように呼び出す必要がありますが、それ以外の場合、JSONは他のエンティティクエリと同じように見えます。

Sam Muellerは、この手法の使用に関する非常に優れたブログを公開しています。http://samuelmueller.com/2009/11/working-with-projections-and-dtos-in-wcf-data-services/

于 2012-07-30T13:06:43.223 に答える