1

我無法正確獲得此設計。我正在使用存儲庫模式來管理我的數據層。在我的一個控制器(MVC3)中,我構建了一個需要執行連接的LINQ查詢。我有2個關於這方面的問題:使用存儲庫模式與EF4加入集合的難度

  1. 是最好添加一個方法到我的倉庫來執行所有連接,投影等?我對此有點猶豫,因爲這會導致我的存儲庫中不斷增長的合同定義?
  2. 比方說,我有一個Post回購的List()方法返回所有項目。我目前不能在linq(join)查詢中使用此方法,因爲它無法將其轉換爲商店表達式。請注意下面的代碼使用了一個名爲repo的類,它使用相同的上下文實例來引用我所有的存儲庫(post,friends)。

BIG編輯: 事情多一點我清楚了,但我希望有人會在這裏跳,並幫我把一切都安排;-)。我正在做的是與我的存儲庫模式一起實現一個規範模式。問題是,我正在使用POCO,並且我的存儲庫正在使用使用IObjectSets的IContext接口。所以在下面的列表方法中,Posts是一個IObjectSet,而Context是一個IContext接口,我注入了我的實際上下文。

我一直在閱讀,有一些非常好的準備使用的代碼,如 implementing-repository-pattern-with-ef4-poco-supportimplementing-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

我該如何設計?我一直在閱讀模型定義的函數,但我不確定這是否是要走的路?

在此先感謝

+0

嗯,看起來像我的第一個問題通常使用規範模式解決 – Syg

回答

0

是不是會好一些抽象的說出來呢?

回答:您可以查看 - Ritesh rao的 - NCommon。已經使用IEFSession來包裝 的ObjectContext。