Asp.net Zero 應用實戰-官方示例PhoneBook學習1

来源:http://www.cnblogs.com/donnieyoung/archive/2017/02/25/6442911.html
-Advertisement-
Play Games

適用Zero版本:ASP.NET Core & Angular 2+ (aspnet-zero-core-3.1.0)。 該版本官方有兩個solution文件夾:Angular(前端) 和 aspnet-core(後臺服務)。 在開始以下步驟之前需要能夠成功發佈程式,對於後臺服務只要能運行即可,如有 ...


適用Zero版本:ASP.NET Core & Angular 2+ (aspnet-zero-core-3.1.0)。

該版本官方有兩個solution文件夾:Angular(前端) 和 aspnet-core(後臺服務)。

在開始以下步驟之前需要能夠成功發佈程式,對於後臺服務只要能運行即可,如有報錯可根據提示安裝需要的插件。Angular 則比較麻煩,裝的東西較多,官方建議用yarn,這個要下載,順藤摸瓜都安裝完即可。

我沒有改解決方案名稱,仍用的預設solution的名稱MyCompanyName.AbpZeroTemplate,所以下麵有的文件名跟官網的phonebook示例文檔有區別。

步驟如下:

1、後臺服務solution中的src/***.core/***CoreModule.cs文件中臨時禁用多租戶。

[DependsOn(typeof(AbpZeroCoreModule))]
public class PhoneBookCoreModule : AbpModule
{
    public override void PreInitialize()
    {
        //some other code...
        
        //Enable this line to create a multi-tenant application.
        Configuration.MultiTenancy.IsEnabled = false;
        
        //some other code...        
    }
}

2、增加一個新的菜單項。前端Angular solution中的app\shared\layout\side-bar.component.ts (展開side-bar.component.html文件)在dashboard下麵加入如下代碼

  new SideBarMenuItem("PhoneBook", null, "icon-notebook", "/app/main/phonebook")

3、後臺solution中src/***.core/Localization/AbpZeroTemplate/AbpZeroTemplate.xml (預設的英文字體)中加入代碼。如有對應中文,可在對應的中文文件中加入中文名稱。其他語言中沒加的都預設用英文的。

<text name="PhoneBook">Phone Book</text> 

4、在前端Angular solution中加路由app\main\main-routing.module.ts  

{ path: 'dashboard', component: DashboardComponent, data: { permission: 'Pages.Tenant.Dashboard' } },

{ path: 'phonebook', component: PhoneBookComponent }

此時phoneBookComponent報錯,先忽略不管。

5、在Angular solution的app/main中新建一個phonebook文件夾並創建phonebookcocomponent.ts文件,代碼如下:

import { Component, Injector } from '@angular/core';
import { AppComponentBase } from '@shared/common/app-component-base';
import { appModuleAnimation } from '@shared/animations/routerTransition';

@Component({
    templateUrl: './phonebook.component.html',
    animations: [appModuleAnimation()]
})
export class PhoneBookComponent extends AppComponentBase {

    constructor(
        injector: Injector
    ) {
        super(injector);
    }

}

6、解決第四步的報錯問題。在main-routing.module.ts加入import代碼:

import { PhoneBookComponent } from './phonebook/phonebook.component';

 

7、在Angular solution的app/main/phonebook中新建 phonebook.component.html文件,代碼如下:

<div [@routerTransition]>
    <div class="row margin-bottom-5">
        <div class="col-xs-12">
            <div class="page-head">
                <div class="page-title">
                    <h1>
                        <span>{{l("PhoneBook")}}</span>
                    </h1>
                </div>
            </div>
        </div>
    </div>
   
    <div class="portlet light margin-bottom-0">
        <div class="portlet-body">
            
            <p>PHONE BOOK CONTENT COMES HERE!</p>

        </div>
    </div>
</div>

 

8、在Angular solution的app/main/main.module.ts文件中添加下麵有黃色標記的代碼。 

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

import { ModalModule, TabsModule, TooltipModule } from 'ng2-bootstrap';

import { UtilsModule } from '@shared/utils/utils.module'
import { AppCommonModule } from '@app/shared/common/app-common.module'

import { MainRoutingModule } from './main-routing.module'
import { MainComponent } from './main.component'
import { DashboardComponent } from './dashboard/dashboard.component';
import { PhoneBookComponent } from './phonebook/phonebook.component';

@NgModule({
    imports: [
        BrowserModule,
        CommonModule,
        FormsModule,

        ModalModule.forRoot(),
        TabsModule.forRoot(),
        TooltipModule.forRoot(),

        UtilsModule,
        AppCommonModule,

        MainRoutingModule
    ],
    declarations: [
        MainComponent,
        DashboardComponent,
        PhoneBookComponent
    ]
})
export class MainModule { }

  保存後刷新前端頁面點擊phone book後可出來如下頁面。

 

9、創建實體類person。在後臺solution中的.Core內新建文件夾People,然後在People文件夾內新建如下Person.cs類。

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Abp.Domain.Entities.Auditing;

namespace Acme.PhoneBook.People
{
    [Table("PbPersons")]
    public class Person : FullAuditedEntity
    {
        public const int MaxNameLength = 32;
        public const int MaxSurnameLength = 32;
        public const int MaxEmailAddressLength = 255;

        [Required]
        [MaxLength(MaxNameLength)]
        public virtual string Name { get; set; }

        [Required]
        [MaxLength(MaxSurnameLength)]
        public virtual string Surname { get; set; }

        [MaxLength(MaxEmailAddressLength)]
        public virtual string EmailAddress { get; set; }
    }
}

 

10、在後臺solution中的.EntityFramework內的****DbContext.cs文件增加如下黃色標記代碼。

public class ******DbContext : AbpZeroDbContext<Tenant, Role, User>
{
    public virtual IDbSet<Person> Persons { get; set; }
        
    //...other code
}

11、用EntityFramework的code first遷移功能更新資料庫創建PdPersons表。

在windows command prompt 命令行工具定位到.EntityFramework文件夾。輸入:“dotnet ef migrations add "Added_Persons_Table”並回車。

這會在Migrations文件夾中增加一個***Added_Persons_Table.cs類。然後在命令行中輸入:“dotnet ef database update”命令,即可在資料庫中生成新表。

我在執行這步的時候報錯了。提示C:\Program Files\dotnet\shared\Microsoft.NETCore.App 目錄里沒有1.1.0版本的。原來是我沒安裝command line版的

.net core 1.1 sdk.官網直接下載即可下載地址:https://www.microsoft.com/net/core#windowscmd 。安裝好即可成功更新資料庫。

 

12、為新創建的PdPersons表造點初始數據。

在後臺solution的.EntityFramework空間內的Migrations/seed/host 內新建InitialPeopleCreator.cs類

 

 類代碼:

using System.Linq;
using Acme.PhoneBook.EntityFramework;
using Acme.PhoneBook.People;

namespace Acme.PhoneBook.Migrations.Seed.Host
{
    public class InitialPeopleCreator
    {
        private readonly PhoneBookDbContext _context;

        public InitialPeopleCreator(PhoneBookDbContext context)
        {
            _context = context;
        }

        public void Create()
        {
            var douglas = _context.Persons.FirstOrDefault(p => p.EmailAddress == "[email protected]");
            if (douglas == null)
            {
                _context.Persons.Add(
                    new Person
                    {
                        Name = "Douglas",
                        Surname = "Adams",
                        EmailAddress = "[email protected]"
                    });
            }

            var asimov = _context.Persons.FirstOrDefault(p => p.EmailAddress == "[email protected]");
            if (asimov == null)
            {
                _context.Persons.Add(
                    new Person
                    {
                        Name = "Isaac",
                        Surname = "Asimov",
                        EmailAddress = "[email protected]"
                    });
            }
        }
    }
}

 

 

13、在.EntityFramework空間內的Migrations/seed/host 內的InitialHostDbBuilder.cs類里新增如下黃色標記代碼。

public class InitialHostDbBuilder
{
    //existing codes...
    
    public void Create()
    {
        //existing code...
        new InitialPeopleCreator(_context).Create();

        _context.SaveChanges();
    }
}

 然後在命令行中執行代碼:“dotnet ef database update ” 即可。查看PdPersons表裡已有數據。

14、創建person應用程式服務-新建一個介面類。

 

 

 未完待續。。。



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為一個Linux新手,在寫這篇博客之前,裝了幾次jdk,好多次都是環境變數配置錯誤,導致無法登錄系統。經過幾天的研究,今天新裝系統,從頭來完整配置一遍 系統版本:Ubuntu 16.04 JDK版本:jdk1.8.0_121 1.官網下載JDK文件jdk-8u121-linux-x64.tar.g ...
  • Linux 用戶管理2 添加修改和刪除用戶,必須是超級管理員root賬號才可以進行的操作,所以噹噹前賬號不是超級管理員root賬號時,首先要先切換為root賬號。 如圖,ylq為普通用戶,執行添加用戶時,會出現如圖的錯誤: 快捷切換為root用戶: 添加用戶 useradd命令 此時便可以執行添加用 ...
  • 隨著網路的發展,網路安全也越來越重要,對於網站來說,從Http升級到https也是我們要做的首要事情。要實現https,首先我們需要申請一張SSL證書,這篇文章我主要介紹下邊這幾個方面: 1. SSL簡單介紹 2. 免費Letencrypt證書部署 3. 安裝註意事項 一.SSL簡單介紹 ssl作為 ...
  • 在linux進行連接windows下的ftp伺服器 ftp://192.168.2.71 輸入用戶名和密碼登陸成功 當使用get把文件下載後,然後unzip進行解壓時,出現了問題 error [10201_database_linux32.zip]: start of central directo ...
  • 第一步:搭建apache伺服器,這在上篇博客中已經完成 http://www.cnblogs.com/sangmu/p/6422238.html 第二步:安裝ssl yum install mod_ssl -y iptables -I INPUT 1 -p tcp --dport 443 -j AC ...
  • 昨天Boss在公司微信群發了此張圖片,"哪個水槽先灌滿",Insus.NET今天早上才有時間來研究一下: 如果你對此話題有興趣,你可以繼續討論和補充...... ...
  • 前述: 對資料庫操作的封裝,相信網路上已經有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持資料庫操作。這篇文章是分享自己所思考的,對資料庫操作的簡單封裝。我對於這篇文章,認為被瀏覽者所關註重點的是怎麼分析設計資料庫操作封裝,代碼是其次。而且,這是我第一篇文章,為了想好怎麼實現花了些天,代 ...
  • 年前經常聊天的大佬群里有人寫了窗體的倒計時來計算下班時間和放假時間:) 簡直就是在嘲諷我這種沒有工作的人,哈哈哈 窗體的倒計時相當的沒有技術含量,主要是不夠炫酷,不能夠體現我們程式員的身份。 那什麼才叫炫酷?必須是控制台啊! 電視劇上黑客噼里啪啦噼里啪啦滾屏的畫面多炫酷! 所以,研究了一下怎麼樣在控 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...