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?
我编辑了我的问题以包含更好的示例。我需要知道的是ResetFactor方法中的SaveChanges是否会保存之前调用GetModifiedFactors()所做的更改?这基本上是询问ObjectContext实例是否保存在不同的域服务调用中? –
答案仍然相同,“是”,来自客户端的每个方法调用实际上是一个单独的请求,并且每个请求都与新的ObjectContext分离地执行,因此这些更改将正确地反映在数据库中。 –