1. 程式人生 > >ABP學習筆記之搭建APB框架

ABP學習筆記之搭建APB框架

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>

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的搭建,在以後的學習中再陸續新增對這個框架的理解以及記錄一些可能遇到的問題和解決方案。

相關推薦

ABP學習筆記搭建APB框架

ABP(ASP.NET Boilerplate Project),現下比較流行的一種web框架,因為公司新專案準備使用這種框架,所以寫下這篇文章記錄下自己一步一步搭建的過程,就當做是對學習的一個總結與分享。 第一步:通過boilerplate模版建立解決方案

Linux學習筆記搭建LNMP服務器環境

linux mysql php nginx contos LNMP(linux+nginx+mysql+php)服務器環境配置作為新手,肯定是需要linux+nginx+mysql+php這套環境來實驗一些東西的,但是網上的教程亂七八糟的,今天我就來分享一個不錯的快速集成環境安裝包吧系統要

Vue學習筆記搭建vue項目

完整 with 變量 下載 mark global 使用 命令 打開 一、安裝node環境 1、下載地址為:https://nodejs.org/en/ 2、檢查是否安裝成功:如果輸出版本號,說明我們安裝node環境成功 image 3、為了提高我們的效

php 學習筆記搭建開發環境(mac版)

Mac 系統預設集成了很多開發工具,其中就包括 php 所需要的一些軟體工具. 下面我們將搭建最簡單的 php 開發環境,每一步都會驗證上一步的操作結構,請一步一步跟我一起搭建吧! web 伺服器之 apache apache 是一款 web 伺服器,用於執行 php 檔案,除了 apache 外也可以是 n

Flume 學習筆記 Flume NG高可用集群搭建

哈哈 process bind under hdf ora chan lsp max Flume NG高可用集群搭建: 架構總圖: 架構分配: 角色 Host 端口 agent1 hadoop3 52020 collect

ELK 學習筆記 elasticsearch環境搭建

發現 匯總 tex 索引 零配置 1-1 nbsp 日誌分析 com ELK概述: ElasticSearch是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等 Logstash是一個

ODB學習筆記基礎環境搭建

com x文件 應用 er關系 c++ sqli size err deb 一,簡介 ODB是應用於C++的一個開源、跨平臺、跨數據庫的對象關系映射(ORM)系統。 它可以讓你持久化C++對象到關系數據庫,而不必處理表、列或者SQL,無需手動編寫任何映射代碼。 ODB

《逐夢旅程:Windows遊戲編程從零開始》學習筆記二:GDI框架

register 開發 操作 程序 turn use 繪制 cal 完整 1 //===========================================【程序說明】=================================== 2 //

GTK學習筆記Linux下Gtk環境搭建

linux 配置 evel app C/C++語言 好的 學習 搜索 基本 下面介紹下Ubuntu 環境下具體的安裝過程: 1、配置安裝gcc/g++/gdb/make 等基本編程工具(必須裝好) 剛裝好的Ubuntu系統中已經有GCC了,但是這個GCC幾乎什麽文件都不能編

ELK學習筆記CentOS 7下ELK(6.2.4)++LogStash+Filebeat+Log4j日誌整合環境搭建

  0x00 簡介 現在的公司由於絕大部分專案都採用分散式架構,很早就採用ELK了,只不過最近因為額外的工作需要,仔細的研究了分散式系統中,怎麼樣的日誌規範和架構才是合理和能夠有效提高問題排查效率的。 經過仔細的分析和研究,確定下面的架構應該是比較合理的之一(Filebeat也支援直

學習筆記——伺服器環境搭建

  本博文用於記錄一系列本人搭建環境過程中的參考教程 MobaXterm https://www.isharebest.com/mobaxterm.htm https://blog.csdn.net/juyin2015/article/details/79056687/

Vue.js框架學習筆記

Vue.js中的表單 可以用v-model指令在表單 <input>及 <textarea>元素上建立雙向資料繫結,它會根據控制元件型別自動選取正確的方法來更新元素。 v-model 會忽略所有表單元素的 value、checked、select

Vue.js框架學習筆記

Vue.js中的樣式繫結 class和style是HTML元素的屬性,用於設定元素的樣式,我們可以通過v-bind來設定樣式屬性,可繫結一個數據屬性或者物件。 v-bind:class="..." v-bind:style="..." class例項: <!DOCTYPE

es6學習筆記環境搭建與結構賦值

全域性安裝Babel-cli 在終端中輸入以下命令,如果你安裝很慢的話,可以使用淘寶映象的cnpm來進行安裝。安裝cnpm的方法,大家自己百度吧。 npm install -g babel-cli 雖然已經安裝了babel-cli,只是這樣還不能成功進行轉換,如果你不相信可以輸入下邊的命令

Spring Cloud學習筆記Eureka框架的原理

Eureka 服務發現與註冊:我們在呼叫微服務的時候,如果我們的微服務部署了多份,我們應該如何去呼叫?這裡就涉及到了服務發現與註冊。服務發現就是程式如何通過一個標誌來獲取服務列表,並且這個服務列表是能夠隨著服務的狀態而動態變更的。 Spring Cloud提供了多種註冊中心的支援:如Eur

Vue學習筆記vue-cli專案搭建及解析

Vue (一)安裝node.js 首先需要安裝node環境,可以直接到中文官網http://nodejs.cn/下載安裝包。 只是這樣安裝的 node 是固定版本的,如果需要多版本的 node,可以使用 nvm 安裝http://blog.csdn.net/s8460049/art

大資料技術學習筆記hive框架基礎3-sqoop工具的使用及具體業務分析

一、CDH版本的介紹及環境部署     -》Hadoop的三大發行版本         -》Apache Hadoop         -》

大資料技術學習筆記hive框架基礎2-hive中常用DML和UDF和連線介面使用

一、分割槽表的介紹及使用     -》需求:統計每一天的PV,UV,每一天分析前一天的資料         -》第一種情況:每天的日誌儲存在同一個目錄中     &nbs

大資料技術學習筆記hive框架基礎1-基本架構及環境部署

一、hive的介紹及其發展 "27.38.5.159" "-" "31/Aug/2015:00:04:37 +0800" "GET /course/view.php?id=27 HTTP/1.1" "303" "440" - "http://www.micro.com/user.php?act

大資料技術學習筆記Hadoop框架基礎5-Hadoop高階特性HA及二次排序思想

一、回顧     -》shuffle流程         -》input:讀取mapreduce輸入的          &nbs