3

我使用實體框架和Im試圖使這樣一個查詢泛型,因此它可以用於任何實體類型(假設每個實體具有屬性int Id)。實體框架使編譯查詢通用

我想這樣的事情,但沒有收集ctx.TEntity或類似的東西:

public class Queries<TEntity> where TEntity : AbstractEntity 
{ 
    public Func<AdventureWorksEntities, int, TEntity> getQuery() { 
    return 
    CompiledQuery.Compile<AdventureWorksEntities, int, Entity>(
    (ctx, num) => ctx.TEntity.First(x => x.Id>num)); 
    } 
} 

AbstractEnitity:

public abstract class AbstractEntity { 

[Key] 
public int Id {get; set}; 
} 

感謝您的想法:)

+0

實體框架的版本是什麼?你使用ObjectContext還是DbSet? –

+0

我使用EF6代碼優先 - 我可以訪問ObjectContext和DbContext。 DbSet我在我的DbContext類中定義了屬性。 –

+1

我試着用DbContext編譯查詢,但沒有成功(它不被支持,解決方法也不適合我)。你有沒有想過這個鏈接:http://blogs.msdn.com/b/efdesign/archive/2011/06/30/auto-compiled-linq-queries-entity-framework-june-2011-ctp.aspx? –

回答

4

我試着用DbContext編譯查詢,但沒有成功(不支持,並且解決方法也不適合我)。你有沒有看過這個鏈接:http://blogs.msdn.com/b/efdesign/archive/2011/06/30/auto-compiled-linq-queries-entity-framework-june-2011-ctp.aspx

你可以看到這篇文章:http://social.msdn.microsoft.com/Forums/en-US/0c07e1d6-7db6-4348-b106-e576d3153b70/ef-40-compiled-queries-performance?forum=adonetefx。我不認爲使用Compiled Queires尤其與EF的現代版本有很大不同(5 & 6)。

在第一個查詢上,連接已建立,可能需要一些時間。