Ria服务查询中包含的对象与先前的请求合并

时间:2013-06-27 18:14:50

标签: silverlight wcf-ria-services

我正在使用带有RIA服务的Silverlight 4,而且我遇到了以下问题:

我有一个父实体,让我们调用MyParent,以及一个名为MyChild的子实体。父实体的元数据类如下:

internal sealed class MyParentMetadata
{
    [Include]
    [Composition]
    public EntityCollection<MyChild> Childs { get; set; }
    (...)

当对主实体进行查询时,我包含子实体:

public IQueryable<MyParent> GetParentByID(int id)
{
    return this.ObjectContext.MyParent.Include("Childs").Where(x => x.ID == id);
}

在客户端,使用此代码发出请求:

context.Load<MyParent> (context.GetParentByID(id), LoadBehavior.RefreshCurrent, 
    lo => {
       var return = lo.Entities;
    });

第一次提出请求时,它会罚款。让我们说我做了父对象1的请求并得到了这个结果:

=> Parent 1
    => Child 1.1
    => Child 1.2

但是当我再次请求不同的对象时,来自第一个对象的孩子似乎被合并到第二个结果中。我明白了:

=> Parent 2
    => Child 1.1
    => Child 2.1
    => Child 1.2
    => Child 2.2

如何确保'Parent 2'对象只有自己的子对象? LoadBehavior.RefreshCurrent参数似乎只适用于父对象,但不适用于子对象。

1 个答案:

答案 0 :(得分:0)

我以前从未需要LoadBehavior.RefreshCurrent。你是对的,它似乎不适用于包含的实体。

如果我是你,我更喜欢这种方式

  • 在加载前清除上下文对象

  • 获取一个新的上下文实例(我知道它似乎不太好但是解决了这个问题,我们需要大多数情况来加载相同类型的实体,但出于不同的目的)。