0

WCFサービスであるかのようにRIAドメインサービスを操作しようとしています(技術的にはそうです)

生成されたプロキシクライアントから「欠落している」重要な要素があるようです。たとえば、関連するオブジェクトのプロパティ。

簡単にするために、2つのクラスの例を次に示します。

    public class Person
    {
        [Key]
        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        [Include]
        [Association("Person_Hobbies", "Id", "Person_Id")]
        [Composition]
        public IEnumerable<Hobby> Hobbies { get; set; }

    }

    public class Hobby
    {
        [Key]
        public int Id { get; set; }

        public string Name { get; set; }

        public int Person_Id { get; set; }

    }

ドメインサービスでは、人々とその趣味を次のように返すことができます。

public IQueryable<Person> GetPeople()
        {
            var peopleList = new[] {
                new Person { Id = 1, FirstName = "Fred", LastName = "Flintstone", Hobbies = new List<Hobby>() { new Hobby { Id = 1, Name="Reading",  Person_Id=1 },
                                                                                                                    new Hobby { Id = 2, Name="Biking", Person_Id=1}, }},
                new Person { Id = 2, FirstName = "Barnie", LastName = "Rubble", Hobbies = new List<Hobby>() { new Hobby { Id = 3, Name="Skiing",  Person_Id=2 },
                                                                                                                    new Hobby { Id = 4, Name="Rock Climbing", Person_Id=2} } },
                 };

            return peopleList.AsQueryable<Person>();
        }

SilverlightとDomainServiceの間で、これが期待どおりに機能することを確認しました。

ただし、このRIAドメインサービスも参照するコンソールアプリでは、生成されたPersonクラスにHobbiesプロパティがありません(Silverlightクライアントの場合とは異なります)。

GetPeopleを呼び出すと、RootResults(人)とIncludedResults(趣味)が得られ、2つを「結合」できるのは事実です。だから私は趣味の財産なしで生きることができます

難しいのは、ChangeSetEntryの配列を準備することです---コンソールアプリから人とその趣味の両方をサービスに送信するにはどうすればよいですか?Silverlightで、新しいPersonを作成し、Hobbiesプロパティに趣味を追加し、DomainContextとSubmitChangesにPersonを追加します。舞台裏でRIAサーバー(クライアントまたはサーバーのどちらかはわかりません)がそれを整理します。

ChangeSetEntryオブジェクトの配列内の趣味への人のリンクに苦労しています。

4

1 に答える 1

2

私の知る限り、これは予想される動作です。アソシエーションプロパティは、コードジェネレーターによってプロキシで生成されるSLドメインコンテキストの「魔法」です。個人用の1つのchangesetentryと、個人が持っている趣味ごとのchangesetentryを含む配列を送信できます。その配列のインデックスは重要です。関連付けを追跡するために使用します。そのようなものとの関連付けを持つ各ChangeSetEntryのAssociationsプロパティにデータを入力します

Dictionary<string, int> personHobbyAss = new Dictionary<string, int>();
personHobbyAss.Add("Person_Hobbies", 1)

ここで、1は関連するエントリのインデックスです。

私はそれが単純でかなり制限的ではないことに同意します、しかし...少なくともそれは機能します。「参照」Hobby.Personなしであなたのようなアソシエーションを試したことはなく、Fkだけであることに注意してください。

于 2012-08-29T08:26:56.637 に答える