我一直在尋找網絡,但我還沒有找到任何關於此的信息。正如我們所知,Linq在運行之前爲我們提供了將表達式轉換爲T-SQL的CompiledQuery。我試圖設計一個通用的存儲庫來與我的EF進行交互,但是除了Linq查詢被編譯。如果任何人都可以指點一下,這將是偉大的:)使用通用存儲庫設計模式編譯Linq
1
A
回答
2
這幾乎是不可能的,因爲如果你想預編譯查詢你必須知道它。對於通用存儲庫,通常只有這樣:
public interface IRepository<T>
{
IQueryable<T> GetQuery();
}
所以使用存儲庫實例的代碼負責定義查詢。預編譯,需要具體的庫將包含類似的方法:
IEnumerable<Order> GetOrdersWithHeaderAndItemsByDate(DateTime date, int take, int skip);
IEnumerable<OrderHeader> GetOrderHeadersOrderedByCustomer(int take, int skip);
等
很明顯,你很難在準備通用存儲庫這樣的查詢怎麼一回事,因爲它們依賴於具體的實體。
2
您正在尋找的實施Specification pattern。基本上,這是創建一個包含篩選查詢所需信息的Specification
對象。通過使用規範,您可以實現Generic Repository
實現,並將自定義查詢邏輯放入規範中。該規範的基類看起來類似:
public class Specification<TEntity>
{
public Specification(Expression<Func<TEntity, bool>> predicate)
{
_predicate = predicate;
}
public bool IsSatisfiedBy(TEntity entity)
{
return _predicate.Compile().Invoke(entity);
}
public Expression<Func<TEntity,bool>> PredicateExpression{
get{ return _predicate; }
}
private Expression<Func<TEntity, bool>> _predicate;
}
關於實現與實體框架的規範模式非常有幫助的物品可以在http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/找到
相關問題
- 1. 存儲庫設計模式指導
- 2. MVC存儲庫模式設計決策
- 3. 與存儲庫設計模式交易
- 4. 使用存儲庫和映射實現MVC設計模式,C#
- 5. 使用存儲庫設計模式組織類
- 6. asp.net mvc3與通用存儲庫模式LInq到sql
- 7. Linq到SQL通用存儲庫模式更新問題
- 8. Linq到SQL更新不起作用使用存儲庫模式
- 9. 使用ViewModels設計MVC存儲庫
- 10. linq設計模式
- 11. 一個使用存儲庫模式的Linq To SQL的DataContext
- 12. Linq to Sql - 如何使用存儲庫模式更新對象?
- 13. 使用Linq-to-SQL,IOC和存儲庫模式預取數據
- 14. 你會如何像「工廠」設計模式一樣編碼存儲庫模式?
- 15. 存儲庫模式和Linq到sql
- 16. LINQ to SQL和存儲庫模式
- 17. 在通用存儲庫模式中使用ApplicationUser
- 18. 使用PetaPoco實現存儲庫模式
- 19. 使用EF7的存儲庫模式
- 20. 如何使用存儲庫模式
- 21. 使用LINQ2SQL(存儲庫模式)的SqlCacheDependency
- 22. 使用PowerShell的存儲庫模式
- 23. 使用ORM替換存儲庫模式?
- 24. 使用存儲庫模式的幫助?
- 25. 使用RxJava實現存儲庫模式
- 26. 狀態設計模式 - 編譯錯誤
- 27. jQuery庫中使用的設計模式
- 28. 我應該使用哪種設計模式來存儲集合?
- 29. C#Linq-SQL:用於存儲庫模式的UpdateByID方法
- 30. 使用LINQ to SQL而不生成模型的存儲庫模式
http://linqautocompiler.codeplex.com/可能工作作爲入口點 – gliljas 2011-05-04 14:04:16