2013-01-02 101 views
1

存在架構問題。我試圖將邏輯層分成物理層,並且遇到一些麻煩。這裏是我想要的東西設置的方式:實體框架和N層

  • 實體 - 一個DLL。我的POCO課程。沒有任何傾向。
  • DAL - 一個DLL。包含模型和DbContext。依賴於實體。
  • BLL - 一個DLL。包含CRUD功能。依賴於DAL和實體
  • 用戶界面 - 一個網站項目。對BLL說話。

我的問題是,在BLL,我做這樣的事情:

''' <summary> 
''' The repository 
''' </summary> 
''' <remarks></remarks> 
Private context As MyContext 

''' <summary> 
''' Instantiate the business layer 
''' </summary> 
''' <remarks></remarks> 
Public Sub New() 
    context = New MyContext() 
End Sub 

''' <summary> 
''' Insert a general retrieve into the database 
''' </summary> 
''' <param name="myEntity">The entity to insert</param> 
''' <returns>The id of the entity added</returns> 
''' <remarks></remarks> 
Public Function Create(ByVal myEntity As myEntity) As String 
    Try 
     context.myEntity.Add(myEntity) 
     context.SaveChanges() 
    Catch ex As Exception 
     Throw ex 
    End Try 
    Return myEntity.id 
End Function 

但爲了呼籲加入我的實體,我需要的EntityFramework.dll參考,因爲我的背景下,從繼承的DbContext 。我沒有看到如何避免這種情況,而無需創建一個存儲庫,這看起來像是一個不必要的額外抽象層,再加上我認爲我不需要使用DbContext。

我在這裏錯過了什麼?

回答

1

您的DAL可以定義由您的派生環境和工廠爲您的環境實現的接口。 BLL將只使用接口和工廠。

+0

對不起,我需要更詳細一點。我不確定我是否理解你所引用的所有概念。 –

+0

因此,如果我的上下文被稱爲myDbContext,它從DbContext繼承,我應該有一個ImyDbContext,並且實際上下文繼承自DbContext並實現ImyDbContext。我必須在早上嘗試並實施這一點。 –

+0

我被困在這裏。我創建了一個接口,但接口依然依賴於IDbSet,這需要業務層中的EntityFramework DLL。 –

1

如果你被困在這個題目,你應該看看CodePlex上可用的N層實體框架:http://ntieref.codeplex.com/

+0

我已經研究出瞭如何做到這一點,但肯定會看看該項目來幫助清理。 –