1

我正在尝试将 Entity Framework 4.0 用于 asp .net 应用程序。到目前为止,这将是文件后面的旧式代码,没有单元测试,但将来我可能会使用 MVP 和单元测试,但到目前为止,这对我来说不是问题。我正在使用数据库优先方法。这是一个模型(我无法发布图像,因为我需要声誉才能发布图像)

  • 表:应用程序(ApplicationID、名称、隐藏)
  • 表:用户(UserID、ApplicationID、Username、IsActive)
  • 表:角色(RoleID、ApplicationID、名称)
  • 表:UserRole(UserRoleID、RoleID、UserID)

我一直在阅读很多关于 Entity Framework 以及如何使用它的文章,但仍然无法对某些东西有一个非常基本的想法。我在哪里为应用程序、用户、角色、用户角色等编写这样的代码?

public List<Application> GetAllUnhiddenApplications()
{
    List<Application> applist = null;
    using (CustomAppsPortalEntities ctx = new CustomAppsPortalEntities())
    {
        applist = (from app in ctx.Applications
            where app.Hidden == false
            orderby app.Name
            select app).ToList();
    }
    return applist;
}

我分别在单独的项目 Project.Data 和 Project.Entities 中分离了上下文和实体。我的问题是,上面的代码是属于 BLL(类名 ApplicationBLL)还是 DLL(ApplicationDLL)?从过去的两天开始,我一直在搜索很多 SO 问题、博客、教程,不同的人有不同的方法。这是我的困境。

如果我将代码放在数据层,那么在业务层,我必须创建一个“传递”函数,如 ApplicationBLL.GetAllUnhiddenApplications,它将返回 ApplidationDLL.GetAllUnhiddenApplications。我必须对所有查询重复它,基本上整个 BLL 最终将成为 DLL 的“通过”层。你能给我一个具体的例子来说明参考上述模式的业务层将用于什么?

如果我将代码放在业务层中,那么 linq 将存在于业务层中,最终将由实体框架转换为 SQL,因此就像将查询逻辑暴露给业务层一样。

我们的环境 我们的环境是快节奏的,并且希望通过适度适当的方法尽快完成这个项目,其中有一个单独的层,但是将来当我们有时间时,我们可能会重构代码并使其真正健壮​​,但它是目前还不是问题,但如果时间允许,我们希望现在就实施最佳实践,而不是在未来重构代码。

4

2 回答 2

0

许多人认为 EF 是 DLL。

通常,我设置我的项目是这样的......

  D --->  Presentation Layers (MVC, WCF, WinForms, etc)
  A               |     
  T               V
  A --->  Business Logic Layer
                  |
  M               V
  O --->  Entity Layer / DLL
  D
  E
  L

Data Models 项目实际上只是 POCO 的集合,可用于任何其他项目。

实体层是您的 EDMX 文件和上下文。

访问 Entity/DLL 层中的上下文应该没问题,因为 .Net 已经为您抽象了所有内容。

如果您考虑一下,抽象出 DLL 层的全部原因是您可以更改数据库而无需更改 BLL。使用 EF,您可以在 1 步中更改数据库,并且一切都应该仍然有效....只要您的架构保持不变。

于 2013-10-20T21:39:50.543 回答
0

上述代码通常位于 BL 层中。在您的 BL 层中使用 linq 很好,因为您的 linq 查询仍然对数据持久性一无所知。从 linq 查询的角度来看,它是从实体框架中查询对象。

您可能缺少的是“存储库模式”和“工作单元模式”。存储库模式充当实体框架的接口。它允许您与 EF 对象进行交互,例如内存中的集合。通常我将所有存储库保存在一个项目中并相应地引用。举个例子,Microsoft Spain 提供了一个 n-tierd 示例,

http://microsoftnlayerapp.codeplex.com/

它的设计非常过度,但我相信它会给你你想要的东西。

于 2013-10-20T21:27:35.477 回答