0

我正在尝试使用 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 对象数组中的爱好联系起来。

4

1 回答 1

2

据我所知,这是预期的行为。关联属性是代码生成器在代理中生成的 SL 域上下文的“魔法”。您可以发送一个数组,其中包含一个人的变更集条目和一个人的每个爱好的变更集条目。该数组中的索引很重要。您使用它来跟踪关联。填充与类似内容有关联的每个 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 回答