Asp.net mvc ASP.NET MVC和ADO.NET实体框架

Asp.net mvc ASP.NET MVC和ADO.NET实体框架,asp.net-mvc,entity-framework,ado.net-entity-data-model,Asp.net Mvc,Entity Framework,Ado.net Entity Data Model,我有一个问题,没有建议我无法解决。我正在开发一个ASP.NET MVC应用程序,并使用ADO.NET EF连接到数据库。我的问题是,我不知道我的应用程序的业务逻辑应该使用EF创建的实体,还是应该再创建一个抽象层,并将EF实体与业务逻辑对象分离(并在这些对象类型之间开发一些转换器)。或者我完全错了,我应该换一种方式?怎么用?哪种解决方案是最佳实践?我通过为数据类和模型类创建单独的项目来处理类似的情况 数据类将是由ADO.net模型生成的数据类,然后您可以使用存储库模式连接到ADO.net上下文,检

我有一个问题,没有建议我无法解决。我正在开发一个ASP.NET MVC应用程序,并使用ADO.NET EF连接到数据库。我的问题是,我不知道我的应用程序的业务逻辑应该使用EF创建的实体,还是应该再创建一个抽象层,并将EF实体与业务逻辑对象分离(并在这些对象类型之间开发一些转换器)。或者我完全错了,我应该换一种方式?怎么用?哪种解决方案是最佳实践?

我通过为数据类和模型类创建单独的项目来处理类似的情况

数据类将是由ADO.net模型生成的数据类,然后您可以使用存储库模式连接到ADO.net上下文,检索数据类,并使用类似的方法将数据类映射到业务模型


这将允许您在模型上使用MVC验证,如Required、Regex等,避免弄乱数据类,只传递模型。

这完全取决于您的应用程序、范围和要求。为了层的缘故引入抽象层意味着引入复杂性和间接性,而这通常并不能真正实现。对于分层架构的过度使用,目前正在引入术语“千层面软件”,以取代臭名昭著的意大利面条软件

为了说明这一点,我并不反对抽象层。使用它们在很大程度上取决于您的具体需求


我将从一个简单的体系结构开始,并根据需要添加层,以确保可测试性和可维护性。当前版本的实体框架(在本文撰写时为4.1)允许使用POCO,而
DbContext
非常类似于存储库和工作单元模式。在大多数情况下,这些现成的功能可能足以作为开始。

一般来说,我发现最好将业务逻辑放在域模型和服务层中。域模型中的逻辑更可取,因为它更易于测试,但并非所有逻辑都能以这种方式轻松实现。例如,当一个操作涉及多个域对象时,您不能总是合理地将其放置在其中一个域对象中,而不会产生性能影响和其他问题。

这就是POCO发挥作用的地方。您可以从数据模型生成通用POCO,并在业务层中使用它们。EF随后将创建POCO并跟踪它们


这里的想法是,您的POCO只是实体,而不是EF对象(虽然EF会在幕后创建POCO的代理版本)

感谢您的支持。你的帖子刚刚踢了我一脚,说“睁大眼睛”:)很乐意帮忙!我知道自己很快就会陷入分析瘫痪。。。