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中最后一条记录做对比,以便生成相应的实体。也就是说这张表中的最新一条数据时不能够被删除的。
ABP(ASP.NET Boilerplate Project)学习总结的更多相关文章
- ABP(ASP.NET Boilerplate Project)快速入门
前言 这两天看了一下ABP,做个简单的学习记录.记录主要有以下内容: 从官网创建并下载项目(.net core 3.x + vue) 项目在本地成功运行 新增实体并映射到数据库 完成对新增实体的基本增 ...
- 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)
本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...
- ABP(ASP.NET Boilerplate Project)框架探讨
从官网上下载下来带Module-Zero的abp框架. vs2015打开解决方案. 首先让系统run起来.把webconfig数据库连接改一下.启动程序. 发现报错:“本地语言指定”的错误,之后运行n ...
- Asp.Net Boilerplate Project (ABP) 视频教程
转自youtube:https://www.youtube.com/playlist?list=PLlu_PkRHZce-EtuVO1zVQpNgrB7Hiu1vu 虽然全部都没有声音,但看操作还是可 ...
- ABP之什么是ABP(ASP.NET Boilerplate)
1.介绍 ABP是开源的且文档比较齐全的应用程序框架.其实它不仅仅是个框架,考虑其最佳实践,ABP更提供了基于领域驱动设计(DDD)的强大价格模型. ABP支持最新的ASP.NET Core和EF C ...
- Asp.Net Boilerplate Project 使用swagger调试api
文件有点大,去掉了packages文件夹,(Swashbuckle.Core.5.6.0) 链接:https://pan.baidu.com/s/1DzMLhFyRav0dufS4dTeMzg 提取码 ...
- ASP.NET Boilerplate终于发布v1.0了
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ABP经过2年多的开发,终于发布第一个主要版本了,谨此提醒ABP的使用者. ASP.N ...
- 十一、ASP.NET Boilerplate
一.ASP.NET Boilerplate 实体是 DDD(领域驱动设计)的核心概念之一.Eric Evans 是这样描述的“很多对象不是通过它们的属性定义的,而是通过一连串的连续性事件和标识定义的” ...
- 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.解压后打开解决方案,解决方案目录: ...
随机推荐
- eclipse修改代码没用、debug无法进断点、
设置eclipse自动编译代码 处理tomcat不进断点问题 添加需要debug的项目 以上操作还是不行的话 可以把tomcat删除重新添加试试看
- [Beta阶段]第二次Scrum Meeting
Scrum Meeting博客目录 [Beta阶段]第二次Scrum Meeting 基本信息 名称 时间 地点 时长 第二次Scrum Meeting 19/05/03 大运村寝室6楼 40min ...
- 冰多多团队-第八次Scrum例会
冰多多团队-第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj debug, IAT debug, IAT 牛雅哲 将语音部分迁移到IatDemo上,去将科大讯飞的语音听写dem ...
- Gevent简明教程
Gevent简明教程 发表于 2015-11-28 | 分类于 技术| | 阅读次数 5159 前述 进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程.多线程.协程和异步. 多 ...
- Unity2D音游案例-节奏大师教程+源码+素材
Unity2D音游案例-节奏大师(Unity2017.2 ,基于Koreographer),本案例涉及到一些音乐音频音波的一点点内容. 首先,我们会把音游的核心功能实现,之后几个重要内容会出给思路并带 ...
- redis 链接
一.redis启动: 本地启动:redis-cli 远程启动:redis-cli -h host -p port -a password 例如:redis-cli -h r-2mlmkmxu7.red ...
- OpenStack(三)——allinone云平台的使用方法
接着OpenStack(二)——使用Kolla部署OpenStack-allinone云平台继续操作. 特别感谢https://www.cnblogs.com/openstackteam/p/5519 ...
- 【LeetCode算法-53】Maximum Subarray
Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...
- (转载)人脸识别中Softmax-based Loss的演化史
人脸识别中Softmax-based Loss的演化史 旷视科技 近期,人脸识别研究领域的主要进展之一集中在了 Softmax Loss 的改进之上:在本文中,旷视研究院(上海)(MEGVII Re ...
- maven-archetype-plugin 的正确打开方式
1. 准备好一个编辑好的模板工程 2. 在 pom.xml 中添加 maven-archetype-plugin 插件 <plugin> <groupId>org.apach ...