我正在使用带有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参数似乎只适用于父对象,但不适用于子对象。
答案 0 :(得分:0)
我以前从未需要LoadBehavior.RefreshCurrent
。你是对的,它似乎不适用于包含的实体。
如果我是你,我更喜欢这种方式
在加载前清除上下文对象
获取一个新的上下文实例(我知道它似乎不太好但是解决了这个问题,我们需要大多数情况来加载相同类型的实体,但出于不同的目的)。