实体框架和N层

时间:2013-01-02 21:40:18

标签: asp.net entity-framework webforms n-tier-architecture

有架构问题。我试图将逻辑层分成物理层并遇到一些麻烦。这是我想要设置的方式:

  • 实体 - DLL。我的POCO课程。没有依赖。
  • DAL - 一个DLL。包含Model和DbContext。依赖实体。
  • BLL - 一个DLL。包含CRUD函数。依赖DAL和实体
  • UI - 网站项目。跟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

但是为了在我的实体上调用Add,我需要对EntityFramework.dll的引用,因为我的上下文继承自DbContext。我没有看到如何在不创建存储库的情况下避免这种情况,这似乎是一个不必要的额外抽象层,而且我认为我不需要使用DbContext。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

您的DAL可以为您的上下文定义由派生上下文和工厂实现的接口。 BLL将仅使用界面和工厂。

答案 1 :(得分:1)

如果你坚持这个话题,你应该看看CodePlex上提供的N层实体框架:http://ntieref.codeplex.com/