我试图在设置为DAL(数据访问层),BLL(业务逻辑层),然后是表示层(通常是ASP.NET Web应用程序或控制台应用程序)的环境中使用EF4.1。

目前,我使用LINQ to SQL进行所有项目,并且设置了如上所述的使用多层的设置。

在查看EF时,尽管所有示例似乎仅使用1层或2层,但很难找到使用DAL和BLL的完整示例。

目前,我最想要的是使用POCO代码生成器创建POCO类,然后将这些类重新定位到我的BLL项目中-.edmx和对象上下文保留在DAL中。

但是,与此有关的问题是DAL需要对BLL的引用,以便它了解POCO类-理想情况下,引用将是相反的。如果DAL有对BLL的引用,那么我也不能从BLL到DAL引用-因为您不能有循环引用,所以我不能对对象上下文执行任何操作,例如从bll调用save changes方法。

无论如何,我对这一切都有些混乱。

我正在考虑以另一种方式(类似于我目前使用LINQ to SQL的方式)执行操作,其中EF实体对象保留在DAL中,我编写了自己的BLL类,将其“pi带”到其DAL对象计数器部分。这样,DAL可以引用BLL和BLL。

很抱歉,这是一个漫长的问题,但是感谢人们的想法,我确实花了数小时来阅读有关EF的信息,但是却很难看清它如何以多层的方式工作。

最佳答案

好吧,几个月前我问过自己同样的问题。

我从Microsoft找到了一份有关分层的白皮书,我还记得他们在某些情况下将EF视为BLL + DAL组件。

就我而言,这是到目前为止我一直在做的事情:

  • 我只创建两层:表示(ASP.Net)+业务层(包含EF类,EDMX和数据库上下文)
  • 我在Presentation层中管理数据库上下文(通过对EF对象生命周期的Session或HttpRequests进行更多控制)

  • 实际上,我合并了BLL + DAL。但是我必须承认我没有参与具有非常复杂的业务流程的项目。
    从严格的体系结构角度来看,我知道这并不完美,但对于我必须处理的项目来说,它确实很不错。

    第一次,我创建了3层,但是当您不得不不断创建“哑”类以映射DAL和Presentation时,这是一个噩梦。

    我猜取决于您的数据和业务模型的复杂性。

    关于entity-framework-4 - 多层应用程序中的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6641111/

    10-12 22:18