Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 如何在Silverlight之外的RIA服务代理客户端中使用关联_Wcf_Wcf Ria Services - Fatal编程技术网

Wcf 如何在Silverlight之外的RIA服务代理客户端中使用关联

Wcf 如何在Silverlight之外的RIA服务代理客户端中使用关联,wcf,wcf-ria-services,Wcf,Wcf Ria Services,我正在尝试使用RIA域服务,就好像它是一个WCF服务一样(从技术上讲是这样的) 生成的代理客户端似乎“缺少”了一些关键元素。例如,关联的对象属性 为了简单起见,这里有两个类的示例: public class Person { [Key] public int Id { get; set; } public string FirstName { get; set; } public string LastName

我正在尝试使用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; }

    }
公共类人物
{
[关键]
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
[包括]
[协会(“个人爱好”、“身份证”、“个人身份证”)]
[组成]
公共IEnumerable嗜好{get;set;}
}
公共课爱好
{
[关键]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共整数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>();
        }
public IQueryable GetPeople()
{
var peopleList=new[]{
新人{Id=1,FirstName=“Fred”,LastName=“Flintstone”,业余爱好=new List(){new Hobby{Id=1,Name=“Reading”,Person_Id=1},
新爱好{Id=2,Name=“骑自行车”,Person_Id=1},},
新人{Id=2,FirstName=“Barnie”,LastName=“browse”,业余爱好=new List(){new Hobby{Id=3,Name=“skilling”,Person_Id=2},
新爱好{Id=4,Name=“攀岩”,Person_Id=2}},
};
返回peopleList.AsQueryable();
}
我已经验证了,在Silverlight和DomainService之间,这完全符合预期

但是,在同时引用此RIA域服务的控制台应用程序中,生成的Person类没有嗜好属性(正如Silverlight客户端中一样)

的确,当我给GetPeople打电话时,我会得到RootResults(人)和IncludedResults(爱好),我可以将两者“结合”在一起。这样我就可以不带房子生活了

困难在于准备一组ChangeSetEntry——我如何从控制台应用程序向服务发送一个人和他们的爱好?在Silverlight中,我创建了一个新人,将嗜好添加到嗜好属性,并将此人添加到DomainContext和SubmitChanges。幕后RIA服务器(我不确定是在客户端还是在服务器上)将其整理出来


我正在努力将人与ChangeSetEntry对象数组中的爱好联系起来。

据我所知,这是预期的行为。association属性是代码生成器在代理中生成的SL domaincontext的“魔力”。 您可以发送一个数组,其中包含个人的1个changesetentry和个人的每个爱好的一个changesetentry。 数组中的索引很重要。你用它来记录关联。填充每个ChangeSetEntry的Associations属性,这些条目与类似的内容有关联

Dictionary<string, int> personHobbyAss = new Dictionary<string, int>();
personHobbyAss.Add("Person_Hobbies", 1)
Dictionary personHobbyAss=new Dictionary();
添加(“个人爱好”,1)
其中1是关联项的索引

我同意这并不简单,也没有很大的局限性,但是。。。至少它起作用了。请注意,我从未尝试过像你这样没有“参考”爱好的人,但只有Fk