2011-11-23 59 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分離地執行,因此這些更改將正確地反映在數據庫中。 –

相關問題