3

我将 Silverlight 4 与 RIA 服务一起使用,但遇到以下问题:

我有一个父实体,叫 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

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

4

1 回答 1

0

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

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

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

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

于 2013-07-04T12:04:39.937 回答