是否每个RIA查询都创建一个不同的EF Object上下文?

本文关键字:EF Object 上下文 一个 查询 RIA 创建 是否 | 更新日期: 2023-09-27 18:15:41

我在Silverlight应用程序中使用EF4/RIA组合。

我的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?

是否每个RIA查询都创建一个不同的EF Object上下文?

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

所以new ObjectContext无论如何都会直接从数据库中获取对象,所以它会包含其他服务所做的更改