我無法正確獲得此設計。我正在使用存儲庫模式來管理我的數據層。在我的一個控制器(MVC3)中,我構建了一個需要執行連接的LINQ查詢。我有2個關於這方面的問題:使用存儲庫模式與EF4加入集合的難度
- 是最好添加一個方法到我的倉庫來執行所有連接,投影等?我對此有點猶豫,因爲這會導致我的存儲庫中不斷增長的合同定義?
- 比方說,我有一個Post回購的List()方法返回所有項目。我目前不能在linq(join)查詢中使用此方法,因爲它無法將其轉換爲商店表達式。請注意下面的代碼使用了一個名爲repo的類,它使用相同的上下文實例來引用我所有的存儲庫(post,friends)。
BIG編輯: 事情多一點我清楚了,但我希望有人會在這裏跳,並幫我把一切都安排;-)。我正在做的是與我的存儲庫模式一起實現一個規範模式。問題是,我正在使用POCO,並且我的存儲庫正在使用使用IObjectSets的IContext接口。所以在下面的列表方法中,Posts是一個IObjectSet,而Context是一個IContext接口,我注入了我的實際上下文。
我一直在閱讀,有一些非常好的準備使用的代碼,如 implementing-repository-pattern-with-ef4-poco-support和implementing-repository-pattern-with-entity-framework。
這兩個示例都使用存儲庫中的objectContext。把這個抽象出來也不是更好嗎?
我的資料庫:
public System.Linq.IQueryable<Post> List()
{
return this.context.Posts;
}
而且在我的控制器方法:
var friendquestions = (from q in base._repo.Post.List().OfType<Question>()
from f in _repo.Friends.List()
where f.userId == myid
where q.Author == f.friendId
select q.Id).ToArray();
下不工作,但是,(爲什麼?):
var temp = (from q in base._repo.Post.List().OfType<Question>()
where q.Id > 6
select q.Id).ToArray();
它基本上是同樣的問題在此處描述:linq-to-entities-does-not-recognize-the-method
我該如何設計?我一直在閱讀模型定義的函數,但我不確定這是否是要走的路?
在此先感謝
嗯,看起來像我的第一個問題通常使用規範模式解決 – Syg