我正在尝试使用 RIA 域服务,就好像它是 WCF 服务(从技术上讲它是)
生成的代理客户端似乎“缺少”关键元素。例如关联的对象属性。
为简单起见,这里有两个类的示例:
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(爱好),我可以将两者“加入”在一起。所以我可以在没有爱好的情况下生活
困难在于准备一系列 ChangeSetEntry --- 我如何从控制台应用程序向服务发送一个人和他们的爱好?在 Silverlight 中,我创建了一个新 Person,将爱好添加到 Hobbies 属性,并将 Person 添加到 DomainContext 和 SubmitChanges。在幕后 RIA 服务器(无论是在客户端还是在我不确定的服务器上)将其整理出来。
我正在努力将人与 ChangeSetEntry 对象数组中的爱好联系起来。