这里略过理论篇,但需要了解abp分层,对于小项目来说abp分层有点复杂,这里只是演示,个别地方没有完全按照ddd理论去写,后期我将会完善。

1. 创建ContosoUniversity相关功能的菜单

在vs2019中,按快捷键“ctrl+,”输入navigationprovider,会出现ContosoAbpNavigationProvider类,这个类中存放了整个系统的菜单:

它位于ContosoAbp.Web.MVC项目的Startup文件夹中:

菜单的定义为MenuItemDefinition,第一个参数为菜单项,这个在cshtml中使用到,以便切换到该页面时,该菜单项处于选中状态,第二个参数为菜单名称,为多语言配置,这里只配置中英文,需要找到ContosoAbp.xml和ContosoAbp-zh-Hans.xml分别配置菜单名称,第三个参数为url,可以为相对地址,也可以为外部地址,第四个参数为图标,第五个参数为页面权限;这里暂时没有配置icon和权限; SetNavigation方法中添加菜单,修改如下:

 public override void SetNavigation(INavigationProviderContext context)
{
context.Manager.MainMenu
.AddItem(
new MenuItemDefinition(
PageNames.Home,
L("HomePage"),
url: "",
icon: "home",
requiresAuthentication: true
)
).AddItem(
new MenuItemDefinition(
PageNames.Contoso,
L("ContosoUniversity"),
url: "",
icon: "business"
).AddItem(
new MenuItemDefinition(
PageNames.CUStudent,
L("CUStudent"),
url: "Student"
)
).AddItem(
new MenuItemDefinition(
PageNames.CUCourse,
L("CUCourse"),
url: "Course"
)
).AddItem(
new MenuItemDefinition(
PageNames.CUInstructor,
L("CUInstructor"),
url: "Instructor"
)
).AddItem(
new MenuItemDefinition(
PageNames.CUDepartment,
L("CUDepartment"),
url: "Department"
)
)
).AddItem(
new MenuItemDefinition(
PageNames.Tenants,
L("Tenants"),
url: "Tenants",
icon: "business",
requiredPermissionName: PermissionNames.Pages_Tenants
)
).AddItem(
new MenuItemDefinition(
PageNames.Users,
L("Users"),
url: "Users",
icon: "people",
requiredPermissionName: PermissionNames.Pages_Users
)
).AddItem(
new MenuItemDefinition(
PageNames.Roles,
L("Roles"),
url: "Roles",
icon: "local_offer",
requiredPermissionName: PermissionNames.Pages_Roles
)
)
.AddItem(
new MenuItemDefinition(
PageNames.About,
L("About"),
url: "About",
icon: "info"
)
).AddItem( // Menu items below is just for demonstration!
new MenuItemDefinition(
"MultiLevelMenu",
L("MultiLevelMenu"),
icon: "menu"
).AddItem(
new MenuItemDefinition(
"AspNetBoilerplate",
new FixedLocalizableString("ASP.NET Boilerplate")
).AddItem(
new MenuItemDefinition(
"AspNetBoilerplateHome",
new FixedLocalizableString("Home"),
url: "https://aspnetboilerplate.com?ref=abptmpl"
)
).AddItem(
new MenuItemDefinition(
"AspNetBoilerplateTemplates",
new FixedLocalizableString("Templates"),
url: "https://aspnetboilerplate.com/Templates?ref=abptmpl"
)
).AddItem(
new MenuItemDefinition(
"AspNetBoilerplateSamples",
new FixedLocalizableString("Samples"),
url: "https://aspnetboilerplate.com/Samples?ref=abptmpl"
)
).AddItem(
new MenuItemDefinition(
"AspNetBoilerplateDocuments",
new FixedLocalizableString("Documents"),
url: "https://aspnetboilerplate.com/Pages/Documents?ref=abptmpl"
)
)
).AddItem(
new MenuItemDefinition(
"AspNetZero",
new FixedLocalizableString("ASP.NET Zero")
).AddItem(
new MenuItemDefinition(
"AspNetZeroHome",
new FixedLocalizableString("Home"),
url: "https://aspnetzero.com?ref=abptmpl"
)
).AddItem(
new MenuItemDefinition(
"AspNetZeroDescription",
new FixedLocalizableString("Description"),
url: "https://aspnetzero.com/?ref=abptmpl#description"
)
).AddItem(
new MenuItemDefinition(
"AspNetZeroFeatures",
new FixedLocalizableString("Features"),
url: "https://aspnetzero.com/?ref=abptmpl#features"
)
).AddItem(
new MenuItemDefinition(
"AspNetZeroPricing",
new FixedLocalizableString("Pricing"),
url: "https://aspnetzero.com/?ref=abptmpl#pricing"
)
).AddItem(
new MenuItemDefinition(
"AspNetZeroFaq",
new FixedLocalizableString("Faq"),
url: "https://aspnetzero.com/Faq?ref=abptmpl"
)
).AddItem(
new MenuItemDefinition(
"AspNetZeroDocuments",
new FixedLocalizableString("Documents"),
url: "https://aspnetzero.com/Documents?ref=abptmpl"
)
)
)
);
} private static ILocalizableString L(string name)
{
return new LocalizableString(name, ContosoAbpConsts.LocalizationSourceName);
}
}

菜单文字配置:

2. 创建实体

创建实体是在ContosoAbp.Core项目里,这里先创建Student,Enrollment和Course实体;

3. 在数据库上下文中添加实体对应的数据集

abp强大的地方在于,它虽然提供了仓储模式和工作单元模式,但你依然可以选择最原始的Context用最原始的方法。

数据库上下文定义在ContosoAbp.EntityFrameworkCore项目的EntityFrameworkCore文件夹下,修改如下:

4.添加种子数据

添加初始化数据在ContosoAbp.EntityFrameworkCore项目下的 Seed的文件夹下,这里在Host(租主)文件夹下新建类:DefaultContosoCreator.cs,在这里模仿其他类,添加初始化数据,这里要去除context.SaveChanges();因为后面会统一保存数据,之后在InitialHostDbBuilder.cs添加 new DefaultSettingsCreator(_context).Create();

5. 数据迁移

在程序包管理控制台中执行命令:

add-migration InitialContosoEntities

再执行:update-database;

运行项目,当成功显示界面后,初始化数据会自动写入数据库。

abp实战-ContosoUniversity Abp版-2添加菜单与创建实体的更多相关文章

  1. abp实战-ContosoUniversity Abp版-1运行项目

    1. 去abp官网下载模板工程,当前最新版本是abp5.0,基于.net core 3.0 https://aspnetboilerplate.com/ 项目名称为ContosoAbp 这里使用的是n ...

  2. abp(net core)+easyui+efcore仓储系统——领域层创建实体(三)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...

  3. Abp添加菜单

    Abp添加菜单 在abp模板中添加菜单,EntityFramework+Angular.js模板,使用的Abp版本为3.8.1. 创建Abp项目模板,例如名称叫做LawAndRegulation. 服 ...

  4. 实战框架ABP

    abp及实战框架概述 接触abp也快一年了,有过大半年的abp项目开发经验,目前项目中所用的abp框架版本为0.10.3,最新的abp框架已经到了1.4,并且支持了asp.net core.关于abp ...

  5. [ABP实战开源项目]---ABP实时服务-通知系统.发布模式

    简介 在ABP中,提供了通知服务.它是一个基于实时通知的基础设施.分为订阅模式和发布模式. 本次会在项目中使用发布模式来演示一个用户注册后,收到的欢迎信息. 发布模式 首先我们在领域层建立" ...

  6. 文章翻译:ABP如何在EF core中添加数据过滤器

    原文地址:https://aspnetboilerplate.com/Pages/Documents/Articles%5CHow-To%5Cadd-custom-data-filter-ef-cor ...

  7. ABP实践(3)-ASP.NET Core 2.x版本(从创建实体到输出api)简单实现商品列表及增删改

    项目基于前两篇文章. 本章创建一个简单版的商品管理后台api,用到EF Core用code fist迁移数据创建数据库. 创建Goods实体 在领域层xxx.Core项目[新建文件夹Goods;文件夹 ...

  8. ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据

    ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库 ...

  9. Lucene实战(第2版)》

    <Lucene实战(第2版)>基于Apache的Lucene 3.0,从Lucene核心.Lucene应用.案例分析3个方面详细系统地介绍了Lucene,包括认识Lucene.建立索引.为 ...

随机推荐

  1. vue axios 在 edge 浏览器下的bug

    Edge 浏览器的版本: Microsoft Edge 42.17134.1.0Microsoft EdgeHTML 17.17134 当请求为POST 时,转换为  GET,并且始终报  “来自缓存 ...

  2. 21-django-pure-pagination分页

    一.django-pure-pagination分页 github上的描述(django-pure-pagination provides advanced pagination features a ...

  3. rpm软件包安装与管理

    一.软件包分类 1.软件包分类 源码包 二进制包 2.源码包 2.1 源码包什么样 直接由编程语言写成,没经过编译.类似于java的 .calss 文件,c的 .c文件. [root@love2 ~] ...

  4. 我的计划任务 --- 实现市电停电安全关闭群辉,Windows, Linux等设备

    有一次突然停电,我的群辉DS218+ 的一块硬盘出现故障了,让我担心我的数据安全,其实我是有UPS, 不是在线式的,然后就想如何实现停电自动关机呢? 经过半天的了解,其实群辉支持telnet协议,于是 ...

  5. Java集合专题

    1.Java 中常用的容器有哪些? 常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表. Collectio ...

  6. javaWeb综合案例

    商城案例 分模块:用户模块→ 分类模块 → 商品模块→购物车模块(最难)→ 订单模块 后台模块(往前台的数据的增删改查) 今日任务: 1用户注册 a注册完成 b给注册人发邮件 2用户激活 a 去邮箱激 ...

  7. 【重学Git】基础命令篇

    1.git commit :在提交树中增加一个提交节点,注意:分支是指向提交节点的. 2.git branch newImage : 表示创建一个名为newImage的分支. 3.git checko ...

  8. Violet音乐社区界面原型手册

    目录 Violet音乐社区界面原型手册 一.引言 1.0 项目前阶段相关文档 1.1 编写目的 1.2 开发背景 二.界面原型展示 2.0 界面设计说明 2.1 首页 2.2 歌单/专辑/单曲界面 2 ...

  9. 阿里云 centos7安装docker出行的问题;

    问题1:yum install **时报Delta RPMs disabled because /usr/... yum -y install deltarpm即可: 问题2:yum install ...

  10. Cent OS6.5——网络配置

    1.已安装centos 系统,打开虚拟机,并开机进入centos系统 2.进行网络配置,必须先确认以下几个点: 2-1.网络适配器模式是否为NAT模式,点击虚拟机,选择设置 ——选择网络适配器,NAT ...