Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/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 3 如何为MVC3生成服务和存储库层_Asp.net Mvc 3_Entity Framework_Repository_Scaffolding - Fatal编程技术网

Asp.net mvc 3 如何为MVC3生成服务和存储库层

Asp.net mvc 3 如何为MVC3生成服务和存储库层,asp.net-mvc-3,entity-framework,repository,scaffolding,Asp.net Mvc 3,Entity Framework,Repository,Scaffolding,我最近完成了一个客户机MVC3项目,使用了一个使用micro ORM实现的存储库模式,并为我的业务逻辑提供了一个服务层。IMHO应用程序运行良好,客户满意 但是每当我想添加/实现一个新的服务和相关的DTO时,我必须编写大量的样板代码。此外,还有相当数量的代码重复,将DTO转换为查看模型,然后再转换回相关的PEBKAC。随着需求的发展,需要将数据库模式的更改直接传播到视图模型 对于另一个客户机,我继承了一个.netTiers代码生成项目,该项目给我带来了很多麻烦,直到我修复了基础模板中的一些缺陷,

我最近完成了一个客户机MVC3项目,使用了一个使用micro ORM实现的存储库模式,并为我的业务逻辑提供了一个服务层。IMHO应用程序运行良好,客户满意

但是每当我想添加/实现一个新的服务和相关的DTO时,我必须编写大量的样板代码。此外,还有相当数量的代码重复,将DTO转换为查看模型,然后再转换回相关的PEBKAC。随着需求的发展,需要将数据库模式的更改直接传播到视图模型

对于另一个客户机,我继承了一个.netTiers代码生成项目,该项目给我带来了很多麻烦,直到我修复了基础模板中的一些缺陷,使用MSBuild自动生成代码,并且还使用MSBuild对生成的代码进行了修改,以使其能够在不需要以前手动调整的情况下生成。netTiers最终生成了许多有用的代码,但重复量巨大,复杂度很高,感觉就像是在用大锤剥猫皮

现在我正在看另一个MVC3项目,我想避免自己编写所有的样板文件,但我也想避免生成完整的.netTiers类型代码。我没有用过EF。我倾向于认为它对于我承担的项目规模来说太大了,但如果它能为我省去一些手工步骤,那将是一个巨大的时间节省。EF的优点是什么?它会为我搭建服务层吗

我正在考虑的另一个选择是,这将需要我花费一些美元(不是很多),但如果它能为我生成服务层代码,那将是非常值得的。LightSpeed支持这种类型的代码生成吗

显然,随着域模型和数据库模式的发展,服务需要更新以适应这些变化。netTiers通过生成分部类来实现这一点。这些其他工具如何处理这些更改而不覆盖服务层中的任何自定义逻辑

还有什么其他选择

更新:感谢所有的反馈,有很多积极的选择。有人看过吗


更新#2:我将继续使用mvcscapfolding选项,它首先为EF代码生成代码。开箱即用,它生成一个Repository类,然后不幸地将其与模型绑定在一起,在MVC中,该模型实际上是视图模型,而不是域模型。MVCScaffolding项目中有一个服务层脚手架的拉取请求,因此我们将研究该选项。再加上用于映射POCOs DTO的AutoMapper。

T4模板运行良好,易于修改。它们可以用于数据层以及任何服务层

我们仅用于EF代码的流程:

  • 从我们的数据库构建一个edmx
  • 安装T4 POCO类生成模板
  • 生成POCO和上下文类
  • 删除我们的edmx和T4模板,保留POCO和上下文类
  • 实体框架中的新工具非常棒,因为它们为您提供了多种选择:

    模型一:
  • edmx中的模型
  • 从edmx生成数据库
  • 从edmx生成POCO类
  • (可选)删除edmx,仅运行代码
  • 代码优先:
  • 编写POCO类
  • 从POCO类生成数据库
  • (可选)从POCO类生成edmx
  • 数据库优先:
  • 建立数据库
  • 从数据库生成edmx
  • 从edmx生成POCO类
  • (可选)删除edmx,仅运行代码
  • 增编(14/01/2012): 代码优先迁移的beta版已经发布。我们还没有调查过,但看起来很有趣


    我使用automapper for entities->dto translation

    您可能只会看到EF代码(EF代码首先不生成数据库)。它将允许您独立地设计域层和数据库模式,并在需要更改模式时保留自定义域逻辑。我已经在MVC3项目中成功地使用了它。如果可能,我使用域类作为视图模型,在必要时使用自定义模型绑定或自定义DTO类对其进行扩充。这是我的$0.02。另外,NHibernate3是一种流行的、成熟的、开源的ORM,它允许您“先编写模型”并从中生成DB模式。此外,如果您正在编写大量代码,将域对象与ViewModels/DTO进行转换,请查看开放源代码AutoMapper库,它可以自动完成许多转换,并避免编写大量代码将属性从域实体逐个复制到ViewModel/DTo。您还可以研究自动投影LINQ查询,不再将从左到右(ing)模型复制到DTo的Hanks Thomas。如何传播更改,例如新表或重构表?如果您首先在代码中修改POCO类,那么如何更新数据库以合并这些更改?这是手动步骤吗?我们手动执行该步骤,是的。直接SQL与我们的数据库更改工具配合使用效果更好。我们确实调查了一些基于代码的数据库版本库,但最终还是进行了调查。