2

我正在試圖爲數據層中使用EF4的n層應用程序構建一個簡單的POC。我已經查看了網絡上的大量示例,並且使用DAO或存儲庫作爲ORM的包裝器似乎是一種常見做法。我的理解是,兩者之間的主要區別在於,Repository更通用,例如參數需要IQueryable。我希望(爲了更好的情況)在這一點上堅持使用更簡單的DAO對象,這些DAO對象將包含諸如GetPersonByFirstName(字符串名稱)等相當具體的方法,類似於之前基於ADO.NET的東西所做的。也就是說,我的DAO還需要幾個「交叉」功能。使用實體框架4.0的基本/簡單數據訪問對象(DAO)

  1. 我該如何去分享DAO之間的上下文?優選地,這將以實例化DAO的業務對象不知道EF的方式進行。最初我以爲BO會將會話傳遞給DAO,但這違反了我獨立於EF的BO的要求(除非我沒有想到什麼)。也許某種Singleton/Factory方法?
  2. 是否有更好的方法來處理這個ASP.NET應用程序使用請求上下文?基本上是一個會話每請求類型設置,但不必修改任何表示層代碼。
  3. 我想我可能會有一個基本的類DAO與非常基本的CRUD方法,將在所有的DAO共享,但又不是IQueryable點。
  4. 我想在我的業務對象中使用TransactionScope來包裝我的DAO(我沒有看到這是一個問題)。

謝謝!

回答

0

在做了一些更多的研究之後,似乎我正在將實體框架上下文存儲在httpContext.Items中的正確軌道上。有很多解決方案基本上創建了一個工廠,以這種方式管理EF環境的生命週期。我的解決方案的主要問題是我的庫不能用於非web項目,所以我認爲我需要沿着使用IoC容器(而不是工廠)的路徑爲我注入上下文,對象每個請求。這樣,如果我需要在控制檯應用程序中使用我的庫,例如我可以將配置更改爲類似object-per-thread等。