1

有架构问题。我正在尝试将逻辑层拆分为物理层并且遇到了一些麻烦。这是我希望设置的方式:

  • 实体 - 一个 DLL。我的 POCO 课程。没有依赖。
  • DAL - 一个 DLL。包含模型和 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。我不知道如何在不创建存储库的情况下避免这种情况,这似乎是不必要的额外抽象层,而且我认为我不需要 ti 与 DbContext。

我在这里想念什么?

4

2 回答 2

1

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

于 2013-01-02T22:56:05.830 回答
1

如果你被这个话题困住了,你应该看看 CodePlex 上提供的 N-Tier Entity Framework:http: //ntieref.codeplex.com/

于 2013-07-04T19:45:19.510 回答