Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc EF代码首先介绍如何在客户端层中使用POCO对象_Asp.net Mvc_Entity Framework_Poco - Fatal编程技术网

Asp.net mvc EF代码首先介绍如何在客户端层中使用POCO对象

Asp.net mvc EF代码首先介绍如何在客户端层中使用POCO对象,asp.net-mvc,entity-framework,poco,Asp.net Mvc,Entity Framework,Poco,我是和的新手,所以如果我的问题不清楚或不容易,请原谅 我已经阅读了一些关于EF代码优先方法的教程,现在我正在尝试这个教程 使用代码优先的方法,我使用POCO类来定义我的DB模型、DB逻辑、DB验证、UI验证和一些UI逻辑。因此,我可以在表示层中使用这些类(或对象),或者在处理Web服务(或JavaScript代码)时将它们用作JSON对象 我的问题:这不是把一些逻辑混在一起了吗?我的意思是,我不应该使用像特殊视图模型这样的类进行表示,而这些类应该具有UI逻辑和验证吗 将POCO对象发送到视图(或

我是和的新手,所以如果我的问题不清楚或不容易,请原谅

我已经阅读了一些关于EF代码优先方法的教程,现在我正在尝试这个教程

使用代码优先的方法,我使用POCO类来定义我的DB模型、DB逻辑、DB验证、UI验证和一些UI逻辑。因此,我可以在表示层中使用这些类(或对象),或者在处理Web服务(或JavaScript代码)时将它们用作JSON对象

我的问题:这不是把一些逻辑混在一起了吗?我的意思是,我不应该使用像特殊视图模型这样的类进行表示,而这些类应该具有UI逻辑和验证吗

将POCO对象发送到视图(或一般情况下发送到客户端)是一种良好的做法吗


最后,我需要一些关于如何组织我的项目文件夹的指导?我看到了很多方法,我不知道该选择什么或者我应该基于什么格式

您不应该在应用程序的更高层使用数据实体。使用类似Automapper的库将数据从DAL转换/合成/复制到视图模型或业务类中。这使应用程序的各个层保持独立,并对最终用户隐藏数据库模式


请记住,MVC只关心演示,所有实际工作都应该在应用程序的其他层中进行。我试图保持层的独立性,并使用一点胶水代码将它们捆绑到一个应用程序中。在处理MVC项目时,我可能会编写数据访问层和业务逻辑层,但随后会在命令行实用程序中重用。有很多书都在谈论编写高质量的代码。我个人发现,这非常有帮助。

正如Leffebrene所说,直接向表示层显示数据实体是一种不好的做法,您可以尝试以项目服务的形式公开一些接口,将视图模型返回给控制器。这有助于保持层之间的分离,并实现工作单元模式和其他一些很酷的东西

你可以开始读斯科特·米利的书了

ASP.NET设计模式


作为设计一个好的分层应用程序的起点,他的博客。

您可以在业务层中定义EF实体可以实现的接口;业务逻辑不知道实际的实现。要做到这一点,您需要数据层引用业务层,这意味着您正在反转依赖项—然后使用IoC容器将接口绑定到它们的实现。。。但是是的,这是很多很多方法中的一种


问题是,考虑到单一的责任,您的实体不应该担心UI的东西-这意味着您的接口也需要通过“视图模型”类来实现,这些类实现了验证和其他业务和演示方面的问题。

您的问题需要大量的讨论

为项目选择基础架构是一个复杂的问题,取决于许多因素。有一些设计模式可以解决项目中的不同需求,这些需求涉及到您或您的团队的多种概念和技术。我向您推荐两种有价值的资源,它们可以帮助您理解专注于.Net技术的软件体系结构

  • :CSLA.NET framework是一种应用程序开发框架,可降低构建和维护应用程序的成本。CSLA.NET的创建者Rockford Lhotka有一些书深入描述了项目的最佳基础设施;你所有的问题都在他的书中得到了回答
  • :该项目/示例故意限制在基于简单场景(客户、订单、银行转账等)的N层面向域体系结构中使用最多的模式的.NET实现中。项目/样本有很好的文档记录,您的所有问题也在项目中得到了回答

  • 总而言之,视图模型、POCO、层等都是植根于软件体系结构的概念,我相信它们不能简单地描述

    正如Leffebrene所说,我通常在数据访问中使用POCO层,在视图中使用视图模型层。 我的所有层都使用POCO,控制器负责构建每个视图所需的视图模型。 为了使这项工作更加自动化,我使用automapper。 所以我的解决方案结构通常是这样的:

    • 模型(POCO)
    • 数据访问(NHibertante)
    • 服务(业务层)
    • 网络(用户界面)
      • 视图模型

    您是否尝试过vs 2012 mvc样本?它们非常整洁且具有爆炸性。但是对于每个视图模型,我都需要使用POCO数据中已经定义的属性来定义新的类,对不对???\n一开始它似乎是多余的,但是,在除了最普通的应用程序之外的所有应用程序中,持久化模型和需要专门数据结构的UI表单之间都会存在显著差异。例如,一对多关系在POCO中表示为集合,可以在只读UI表单中呈现为字符串,但需要是包含编辑表单中相关表中所有值的下拉列表。您的POCO实体将无法处理所有这些情况。保持不同层之间的独立性更容易维护。我认为你的答案简短明了,但你能向我推荐我可以使用的模式或组织解决方案的方法吗?我没有得到IoC容器点,你能解释更多吗?查看NInject wiki,它解释得很好。(抱歉,电话留言,链接不明显)