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中最后一条记录做对比,以便生成相应的实体。也就是说这张表中的最新一条数据时不能够被删除的。

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

  1. ABP(ASP.NET Boilerplate Project)快速入门

    前言 这两天看了一下ABP,做个简单的学习记录.记录主要有以下内容: 从官网创建并下载项目(.net core 3.x + vue) 项目在本地成功运行 新增实体并映射到数据库 完成对新增实体的基本增 ...

  2. 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)

    本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...

  3. ABP(ASP.NET Boilerplate Project)框架探讨

    从官网上下载下来带Module-Zero的abp框架. vs2015打开解决方案. 首先让系统run起来.把webconfig数据库连接改一下.启动程序. 发现报错:“本地语言指定”的错误,之后运行n ...

  4. Asp.Net Boilerplate Project (ABP) 视频教程

    转自youtube:https://www.youtube.com/playlist?list=PLlu_PkRHZce-EtuVO1zVQpNgrB7Hiu1vu 虽然全部都没有声音,但看操作还是可 ...

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

    1.介绍 ABP是开源的且文档比较齐全的应用程序框架.其实它不仅仅是个框架,考虑其最佳实践,ABP更提供了基于领域驱动设计(DDD)的强大价格模型. ABP支持最新的ASP.NET Core和EF C ...

  6. Asp.Net Boilerplate Project 使用swagger调试api

    文件有点大,去掉了packages文件夹,(Swashbuckle.Core.5.6.0) 链接:https://pan.baidu.com/s/1DzMLhFyRav0dufS4dTeMzg 提取码 ...

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

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ABP经过2年多的开发,终于发布第一个主要版本了,谨此提醒ABP的使用者. ASP.N ...

  8. 十一、ASP.NET Boilerplate

    一.ASP.NET Boilerplate 实体是 DDD(领域驱动设计)的核心概念之一.Eric Evans 是这样描述的“很多对象不是通过它们的属性定义的,而是通过一连串的连续性事件和标识定义的” ...

  9. ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成

    ASP.NET Boilerplate 学习   1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...

随机推荐

  1. 重置GPU显存 Reset GPU memory after CUDA errors

    Sometimes CUDA program crashed during execution, before memory was flushed. As a result, device memo ...

  2. jQuery实现列表框双向选择操作

    对列表框的操作经常碰到过这样的应用:从左侧的列表框中选中要选的项添加到右侧列表框中,然后提交最终选择的项,对误操作而选中的项还可以执行移除操作.在很多系统中应用比如说求职网站的选择意向工作地区,QQ好 ...

  3. sql注入用<>绕过被过滤的select ——百度杯9月第二场SQL

    题目提示SQL注入,打开源代码发现<!--SELECT * FROM info WHERE id=1--> 尝试union select 1,2,3提示inj code! 经过多次尝试之后 ...

  4. IIS部署Silverlight

    题设: 网站如果应用了Silverlight技术,直接部署到IIS中是无法正常运行的, 分析: 因为Silverlight应用所对应的三种MIME类型没有在IIS中注册,所以Silverlight相关 ...

  5. 修改jar包中的文件

    1.用WinRAR压缩软件打开jar包 2.将修改过的文件直接拖拽并覆盖被替换的文件即可

  6. SQLServer len 函数, 查字符串长度函数

    declare @name char(1000) --注意:char(10)为10位,要是位数小了会让数据出错 set @name='s{sss}fc{fggh}dghdf{cccs}x' selec ...

  7. Centos7.5 php7.2 安装pdo_sqlsrv 连接 sql server(转)

    Centos7.5 php7.2 安装pdo_sqlsrv 连接 sql server 转:https://blog.csdn.net/gdali/article/details/82912542   ...

  8. mysql 得到指定时间段的日期

    set @startDate='2019-01-01'; set @endDate='2019-04-01'; DAY) AS DAY FROM ( SELECT a.a ) AS a ) AS b ...

  9. 研发团队是该制定OKR还是KPI?

    绩效管理和OKR的目标管理,是前行的两条腿,缺谁都会寸步难行.正确的做法是把企业的使命和任务,转化为经营目标,然后再用KPI.OKR等绩效管理工具,分解.执行.考核.. KPI是一套绩效管理的方法.全 ...

  10. Operation之条件和布尔操作符

    amb 当传入多个Observable到amb操作符时, 他将取第一个发生元素或产生事件的Observable, 然后只发出他的元素. 并且忽略其他的Observable let subject191 ...