ABP(ASP.NET Boilerplate Project)学习总结

ABP(ASP.NET Boilerplate Project),现下比较流行的一种web框架,因为公司新项目准备使用这种框架,所以写下这篇文章记录下自己一步一步搭建的过程,就当做是对学习的一个总结与分享。

第一步:通过boilerplate模版创建解决方案
ABP框架官网:http://www.aspnetboilerplate.com/ .
可供选择的体系结构有两种:
1.Single Page Web Application :单页面应用程序
2.Muli Pate Web Application:多页面应用程序

在另外一篇博客中看到说可以选择的ORM框架有两种:EF和Nhibernate.但是官网上只看到EF.所以暂时选择EF框架。
模板使用多页面应用程序,所以选择第二个。单页面应用程序需要学习Angular.js.
下面有一个勾选框,勾选之后ABP框架模板会自动生成用户、角色、权限等方面的管理。输入解决方案名称,点击【Create My Project】生成解决方案,然后会提示下载解决方案的压缩包。

第二步:创建实体(Entity)

打开下载下来的模板 —>【还原Nuget包】,解决方案总共包含5个项目,大致可以分为4层。关于这几层具体的划分,用得多了,自然也就清楚了。

应用服务层(application):提供应用服务方法给表现层调用。
领域层(core):包括业务对象和业务规则,这是应用程序的核心层
基础设施层(EntityFramework):实现领域层中定义的仓储,数据库迁移以及数据交互等。
表现层(web,webApi):与用户打交道的一层。

在Core这一层创建两个实体,Teacher和Student继承自ABP的entity。ABP的entity自带一个Id(int)属性,默认作为主键。我们自己可以根据需要设置主键类型。
ABP基于模块编程,建议每个模块创建一个文件夹,相关的文件放在一起。所以在Core下面创建Teacher和Student文件夹,然后在对应的文件夹下创建实体。

public class Student:Entity<long>
{
public virtual string Code { get; set; }
public virtual string Name { get; set; }
}

public class Teacher : Entity
{
public virtual string Code { get; set; }
public virtual string Name { get; set; }
}

第三步:数据迁移

一般框架都采用DBFrist的模式,即先创建数据库,然后使用代码生成工具(如:动软, CodeSmith..)生成对应的Model.
ABP框架则采用CodeFirst的模式,即先创建对应的model,然后使用数据迁移功能,创建DB。当然有一个不太好的地方就是,以后不能手动修改数据库,否则会导致数据迁移出错。

接下来通过我自己做的demo来说明数据迁移的准备工作(数据库:postgresql):

1.创建数据库连接字符串,既然要做数据迁移这个当然是必须的。打开web中的TestProject.Web中的web.config。找到connectionStrings节点,节点下面有一个默认的连接,修改连接的字符串。这个name的是可以修改的,但是需要注意的是必须和DBContext中使用的name保持一致。打开TestProject.EntityFramework下的TestProjectDBContext,即可看到使用链接的name

<connectionStrings><add name="Default" connectionString="Server=192.168.XXX.XXX;Port=XXX;User Id=***;Password=***$;Database=**;" providerName="Npgsql" /></connectionStrings>
1
2.配置EntityFramework,在web.config中找到entityFramework节点,从ABP下载下来的模板中提供了默认的SqlServer的provider,根据需要配置自己所对应的provider,我的demo使用的postgresql,postgresql还需要在添加节点system.data,否则会出现错误.

<entityFramework>
<!--<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>-->
<defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, EntityFramework6.Npgsql" />
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
</entityFramework>

<system.data>
<DbProviderFactories>
<remove invariant="Npgsql" />
<add invariant="Npgsql" name="Npgsql Data Provider" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>

有可能出现的错误:未解析成员“Npgsql.PostgresException,Npgsql, Version=3.1.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7”的类型,

3.配置完毕,就可以开始数据迁移了。打开解决方案的【程序包管理控制台】,把默认项目切换到TestProject.EntityFramework。否则命令不能运行

4.运行add-migration命令,这个命令后面需要添加一个参数,参数需要符合C#的命名规范,所以输入add-migration entity回车运行。
第一次运行这个命令的时候,可能会出现错误:Unable to generate an explicit migration because the following explicit migrations are pending: [201701271145151_AbpZero_Initial]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
把EntityFramework下面这个文件删除就可以了。然后重新运行。生成成功之后会看到EntityFramework会新增一个cs文件

打开这个文件,就可以看到对应的迁移的语句了。这个操作只会生成对应的文件,并不会修改数据库结构。

5.运行update-database更新数据库结构,完成数据迁移。

一些可能出现的错误和需要注意的地方:

1.An error occurred accessing the database.连接数据库错误,这个就可能是第三步中连接字符串配置出现了错误。

2.未解析成员“Npgsql.PostgresException,Npgsql, Version=3.1.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7”的类型
—有一种可能就是NpgSql和EntityFramework6.Npgsql的暗转顺序不对,重新卸载安装就可以了。
但还有一种比较隐蔽的错误就是数据迁移时生成的文件中数据类型的长度超出数据库类型所允许的长度:JobArgs = c.String(nullable: false, maxLength: 10485760)

3.数据迁移完成之后,数据库会对应生成创建的实体以及数据迁移历史记录表__MigrationHistory。这一张表是用来对比两次数据迁移时实体的变化,以便生成对应的数据迁移实体。每一次数据迁移的时候,都会与__MigrationHistory中最后一条记录做对比,以便生成相应的实体。也就是说这张表中的最新一条数据时不能够被删除的。

原文地址:https://www.cnblogs.com/xiaohouye/p/11134243.html

时间: 2024-10-10 17:43:35

ABP(ASP.NET Boilerplate Project)学习总结的相关文章

ABP (ASP.NET Boilerplate) 应用程序开发框架 新手教学 No.5 建立仓储 Repository

?ABP (ASP.NET Boilerplate) 应用程序开发框架 新手教学 No.0 索引 ABP有内建基本常用的仓储功能例如CRUD,而我们可以进行扩充 在架构上仓储的界面与实践是拆开分别在Domain层与基础设施层的 先说仓储的界面部分 这里来做一个用Map的ID来取得对应Player集合的一个仓储界面 首先一样按照架构我们在Core项目中开一个IRepositories数据夹来放 MyCompany.MyProject.CoreIRepositories 然后我们新增一个界面?IPl

ABP之什么是ABP(ASP.NET Boilerplate)

1.介绍 ABP是开源的且文档比较齐全的应用程序框架.其实它不仅仅是个框架,考虑其最佳实践,ABP更提供了基于领域驱动设计(DDD)的强大价格模型. ABP支持最新的ASP.NET Core和EF Core,同时也支持ASP.NET MVC 5.x和EF 6.x. 2.快速看一个示例 public class TaskAppService : ApplicationService, ITaskAppService { private readonly IRepository<Task> _ta

ASP.NET Boilerplate终于发布v1.0了

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ABP经过2年多的开发,终于发布第一个主要版本了,谨此提醒ABP的使用者. ASP.NET Boilerplate之前顺带介绍过两次.下面直接摘抄一点阳铭的介绍(http://www.cnblogs.com/mienreal/p/4528641.html): ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NE

.NET最流行的Web应用框架ABP ASP.NET CORE

介绍 .NET 下有很多优秀的web开发框架,热度最高的应该还是ASP.NET Boilerplate - Web Application Framewor 因为ABP是一个通用的开发框架,可以用来开发各种场景的web应用程序,开发的精力只要放在业务上就可以了,而且前端的技术也是流行的框架,还有ABP的生态目前还是不错的,有公司在维护,还有很多开发者也在维护中,上面提到的ASP.NET Boilerplate 同时支持.NET Framework和.NET Core,目前已经非常的成熟了,应用在

&lt;&lt;ASP.NET Boilerplate 文档&gt;&gt; 1.1 介绍

介绍 一个快速示例 其它特性 启动模板 如何使用 介绍 我们总是对不同的需求开发不同的应用.但至少在某些层面上,一次又一次地重复实现通用的和类似的功能.如:授权,验证,异常处理,日志,本地化,数据库连接管理,设置管理,审核日志等功能.所以我们创建架构和最佳实践,如分层和模块架构,DDD,依赖注入等,并尝试开发应用时基于一些约定. 由于所有这些是非常耗时而且很难单独创建并可适用于每个项目,许多公司创建自己的框架,他们用自己的框架能快速开发新应用而且不出错.但不是所有的公司都是幸运的,大部分公司没有

Asp.Net编程需要学习什么

Asp.Net编程需要学习什么? 数据库 css js或者jquery html 后台的一门语言C# 下面是新手开发需要注意的几点: 重视基础课的学习 计算机虽然是高科技的象征,但又受到其它专业发展的制约.计算机专业知识的学习同样要加强一些相关知识的学习.计算机学习过程往往是由硬件开始,走向软件,但最终又会走向硬件.一个软件开发高手非常注重程序效率,而效率却往往与计算机硬件知识是紧密相关. 因此高等数学.离散数学.线性代数等数学知识的学习也有一定需求.尤其是软件开发高手,开发过程会涉及数学方面往

Asp.Net MVC5入门学习系列④

原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概念,那么就知道EF有一个code first的特性,什么意思呢!说的通俗简单明了点就是:通过代码映射到数据库!有朋友会说这里不是添加Model说这个EF干啥呢!说这个code first呢就是我们在一会添加Model的同时我打算利用EF的code first特性把我们的Model映射到数据库,这样我

ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行走于天下.但这样真的就可以走一辈子吗?实际上,ASP.Net经常被喷的诟病就在于WebForm以及只会拖控件的ASP.Net程序员,往往大型互联网系统也没有采用WebForm的模式进行开发.但是,WebForm并不是一无是处,而是我们没有用好,还有很多东西我们知其然不知其所以然,现在我们就来对这些平

Asp.Net MVC5入门学习系列①

原文:Asp.Net MVC5入门学习系列① 现在直接开始MVC5的学习系列,学习资源来自Micrsoft. 开始使用Asp.Net MVC 5 打开Visual Studio 2013,然后新建一个项目,具体如下图: VS13与12/10不同的是创建Web的时候你不能像以前那样直接选你要创建框架项目,而把这个选择集中在了第二步骤,当你操作完上面点击确定就可以看到一个集中所有web框架供你选择的窗体,具体如下: 然后点击确定,vs会帮我们完成创建mvc应用程序的动作. 创建完成后,我们的VS会呈