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オブジェクトの配列内の趣味への人のリンクに苦労しています。