2012-04-02 54 views
3

因爲ObjectContext.SaveChanges()發生在事務中,所以我決定最好先調用SaveChanges(),然後調用SaveChanges()先執行ObjectContext上的所有查詢/更新,以便將數據寫入數據庫。反映ObjectContext中的所有更改而不會保留到數據庫

但是這樣做意味着如果我創建一個對象並且經常查詢ObjectContext它會拒絕它存在(因爲數據庫尚未更新,所以它是否存在)。我以爲我可以解決這個問題與一些SaveOptions的,但它並不像我可以。

我基本上希望ObjectContext表現得像我希望提交所有在一次去,我可以修改的代理。有沒有辦法實現這一目標?

回答

6

如果不保存新的對象不存在於數據庫中的變化,並沒有對數據庫執行查詢(=沒有LINQ到實體查詢)將返回他們。要獲得加入到上下文對象,但尚未保存您必須查詢ObjectStateManager

var data = context.ObjectStateManager 
        .GetObjectStateEntries(EntityState.Added) 
        .Where(e => !e.IsRelationship) 
        .Select(e => e.Entity) 
        .OfType<YourEntityType>(); 
0

我不得不做的東西沿着這些路線中有類似的情況:

鑑於鍵和值,其中的列表一些密鑰是新的,並且想要在單個SaveChanges中更新/插入密鑰和值,我首先下拉所有現有密鑰,然後保持單獨的集合keysIncludingNewOnes,其開始僅包含現有密鑰,但是還可以添加任何新創建的鍵。因爲(就像你發現的那樣),因爲上下文不知道新密鑰,所以直到找到一個新的密鑰時,我才查找keysIncludingNewOnes,而不是查詢上下文。 SaveChanges

它應該是比較容易的,你要記住你的「未決除了」對象;如果它不是,你可能有太長的壽命方面,它一般會創建自己的問題。

相關問題