2011-11-23 15 views
3

我在Silverlight应用程序中使用EF4/RIA组合。每个RIA查询是否创建一个不同的EF对象上下文?

我在我的DomainService中有多种服务方法。

其中一种方法从数据库中提取某些数据,并然后修改的对象值:

IEnumerable<Factor> GetModifiedFactors(double threshold) 
{ 
    List<Factor> factors = ObjectContext.Where(f => f.Id == selectedId).ToList(); 

    for(int i = 1; i < factors.Count; i++) 
    { 
     Factor current = factors[i]; 
     Factor previous = factors[i - 1]; 

     // Note that here the value of the entity object has been changed 
     current.Value = 2 * current.Value - 3 * previous.Value; 
    } 

    return factors.Where(f => f.Value > threshold); 
} 

这些计算的值然后被返回给应用SL。

请注意,在本例中实体对象的值已被更改。

我有另一项服务方法,它改变一些数据,然后调用.SaveChanges()

[Invoke] 
public void ResetFactor(int factorId, double defaultValue) 
{ 
    Factor factor = ObjectContext.Factors.FirstOrDefault(f => f.Id == factorId); 

    if(factor == null) 
     return; 

    factor.Value = defaultValue; 

    ObjectContext.SaveChanges(); 
} 

问:

我想知道的是这个调用SaveChanges第二服务方法是否会影响通话作出了第一个服务方法的变化?

还是每个RIA查询/服务调用创建一个新的EF ObjectContext?

回答

0

默认情况下,每个RIA域服务都被创建,初始化,然后它执行你的请求。

因此,新的ObjectContext将直接从数据库中获取对象,因此它将包含其他服务所做的更改。

+0

我编辑了我的问题以包含更好的示例。我需要知道的是ResetFactor方法中的SaveChanges是否会保存之前调用GetModifiedFactors()所做的更改?这基本上是询问ObjectContext实例是否保存在不同的域服务调用中? –

+0

答案仍然相同,“是”,来自客户端的每个方法调用实际上是一个单独的请求,并且每个请求都与新的ObjectContext分离地执行,因此这些更改将正确地反映在数据库中。 –

相关问题