2011-09-23 50 views
0

我正在使用實體框架和mysql。我們創建了一個類我如何定義已經創建的對象集?

public class DataBaseContext : ObjectContext, IDbContext 

有一種方法

public IEnumerable<T> Find<T>(Func<T, bool> whereClause) where T : class 
     { 
      return CreateObjectSet<T>().Where(whereClause); 
     } 

有沒有辦法不每次當我打電話的方法來創建對象集?我可以檢查它是否已經存在?

回答

0

Whooooo。這是非常糟糕的方法。您正在通過Func<>,而不是Expression<Func<>>。這意味着每次執行方法時,EF都會將數據庫表中的所有記錄都映射到T,並在您的應用程序的內存中執行過濾 - 創建對象集是您應該害怕的最後一件事。

無論如何,創建對象集不應該是昂貴的操作,如果你不想每次需要在對象上下文實例中實現一些「本地緩存」時創建它。

+0

我試圖這樣做的原因不是性能。我有一個「已經有一個開放的DataReader與此連接關聯,必須先關閉」。例外,並試圖以某種方式克服這個問題 –

+0

這個問題是絕對無關的對象集。你要麼使用你的上下文實例併發操作(多線程),或者你有問題[這裏]提到(http://stackoverflow.com/questions/4867602/entity-framework-there-is-already-an-open-datareader - 相關的 - 有 - 這-comman/4868569#4868569)。 –

+0

感謝您的回答。我昨天看到那篇文章。現在我想弄清楚這對我有什麼幫助 –

相關問題