如何使用EF6在MVC 5中实现业务逻辑

时间:2017-02-20 04:10:58

标签: c# asp.net-mvc design-patterns entity-framework-6 asp.net-mvc-5.2

我已阅读MVC5 with EF6 DB First tutorial。通过本教程,它将生成代码(控制器和视图)。

我在VS中创建了3个项目

+ AdminWebSite
+ PublicWebSite
+ EntityFramework

我有疑问,我应该在哪里实施业务逻辑,并分享多个网站(Admin& Public)?

业务逻辑可能包括:

  • 带数据库的逻辑(即带多表的交易)
  • 使用SharePoint信息的逻辑
  • 使用电子邮件服务器的逻辑

修改

错字,应该是3个项目而不是3个解决方案,但它应该是类似的情况,AdminWebSitePublicWebSite添加EntityFramework作为参考。

编辑2

在MVC3之前,我将创建一个包含所有业务逻辑的类项目,以及Repository类。这样每个WebSiteWebServices都可以使用相同的业务逻辑(但我不确定这是最佳做法)。

但是当使用EF6迁移到MVC5时,存储库和工作单元似乎已经消失。并且不希望为每个表实现存储库,其中一些表仅用于没有业务逻辑的直接CRUD。

我希望这可以澄清是Too broad

4 个答案:

答案 0 :(得分:0)

看看这个: http://dombrovsky.github.io/EntityHooks/

它看起来像一个旨在与EF6一起使用的框架。它应该允许您在发生某个事件时编写自定义业务逻辑,例如插入或更新记录时。

答案 1 :(得分:0)

您可以在解决方案下使用项目

我通常将数据库层放在一个单独的项目(类库/ DLL)中,让其他项目引用它。这样,您只有一个ORM(实体框架)副本,简化了数据库模型中的任何更改。我还创建了一个数据库项目(如果是SQL服务器),它包含实际的模式定义,包括表和存储过程。这是在架构中进行更改并部署它的好方法。

只要有足够多的代码可以重复使用,通常最好将它作为类库并让客户端项目引用它。

答案 2 :(得分:0)

一个解决方案包括Web项目,BLL项目,DAL项目,Web项目包含发布和管理

答案 3 :(得分:0)

我不会有一个名为EntityFramework的项目,我建议你用一个名为Infrastructure的项目替换这个项目。此基础结构项目将包含依赖于外部源(如EmailSenders和DAL类,如EntityFramework类)的类以及您将来可能希望用其他外部服务替换的其他内容。

您的业务逻辑应存储在Core项目中。该核心项目不会引用Web项目或基础结构项目(但Web项目将引用基础结构和核心项目)。如果你需要核心项目中的EmailSender,你可以引用像IEmailSender这样的界面,它也位于核心。

这基本上就是我建议的结构:

  • AdminWebSite
  • PublicWebSite
  • 基础设施
    • EF
    • 日志
    • 消息
    • 的SharePoint
  • 核心
  • 测试(此项目包含所有单元和集成测试)

我真的建议您阅读使用依赖注入。当你理解DI时,核心和基础设施的分离是有意义的,你会看到它们如何在没有任何硬引用的情况下相互使用。

如果您不想使用UoW或存储库,我建议您将EF移至核心,但基础结构项目对其他外部服务仍然非常有效。