按照此处MVC3 and Entity Framework提出的设计之后,我试图使用MVC4 + EntitiFramework5为DAL,BL和Web创建不同的层。

引用@Davide Piras


  1-ProjectName.Interfaces(类库,实体的接口);
  
  2-ProjectName.DAL(类库,使用了唯一一个甚至都知道EF的类,POCO实体使用另一个文件来实现项目1的接口,在其中您可以使用部分类重新声明相同的对象...);
  
  3-ProjectName.BL(类库,业务逻辑,引用上面1和2的两个项目);
  
  4-ProjectName.Web(ASP.NET MVC应用程序,表示层,引用两个项目1和3,但不引用两个项目);


我对BL和DAL之间的连接有疑问。 DAL知道EF,BL不应该..但是如何实现呢?我的意思是,我在两层上创建了代表我的实体的类(这对我来说似乎有点重复..即使在BL中我将添加验证和其他sutff),但是我如何将数据库值公开给BL ?

在默认的MVC4解决方案中

 DbSet<Entity> entity


我可以查询(.Find等)..我想我需要将它们映射到我的BL中(IQueryable?IEnumerable?Isomething ??)

完全困惑..任何帮助是赞赏

最佳答案

当您谈到DAL和EF时,线条可能会变得有些模糊。在某些情况下,您could consider EF the DAL。但是我通常没有BL直接访问EF并将其抽象到更高的级别,因此,如果需要,您可以轻松地将EF替换为ORM。我使用Repository Design Pattern进一步抽象EF。这种模式的另一个优点是,它使得单元测试更加容易,并且您可以使用依赖注入。我还使用Unit of Work Design Pattern来处理系统中的事务。 DAL的存储库和工作单元也是如此,或者仅仅是EF。这可能是有争议的,而且我知道我自己对尝试定义DAL的关注也越来越长。这是我建议在MVC 4项目中使用的图层。



应用程序层或域层是您的BL层。我倾向于将Service Layer中使用的概念合并到这一层中,因为我尚未看到将其分离出来的任何好处。但是也可以选择在顶层添加此层。

关于c# - MVC4 + EntityFramework架构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14502116/

10-11 08:46