ABP学习入门系列(二)(abp的数据迁移)
本文将介绍在ABP框架中将实体类迁移至数据库表
1.下图是abp的体系结构。 我们要是实现创建实体类并迁移数据到数据库的功能主要就是在下图中domain(领域层)做相应的一些操作。

2,看一下解决方案,如下图。 core就是我们要做相应修改的项目 从上至下依次 application (应用服务层),core(领域层),EntityFramework(基础设施层),web和webapi (Web和展现)

3,在core下创建Tasks文件夹,在文件夹下创建Task类。
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Abp.Domain.Entities;
using Abp.Domain.Entities.Auditing;
using Abp.Timing;
using LearningMpaAbp.Authorization.Users; namespace LearningMpaAbp.Tasks
{
public class Task : Entity, IHasCreationTime
{
public const int MaxTitleLength = 256;
public const int MaxDescriptionLength = 64 * 1024;//64kb public long? AssignedPersonId { get; set; } [ForeignKey("AssignedPersonId")]
public User AssignedPerson { get; set; } [Required]
[MaxLength(MaxTitleLength)]
public string Title { get; set; } [Required]
[MaxLength(MaxDescriptionLength)]
public string Description { get; set; } public TaskState State { get; set; }
public DateTime CreationTime { get; set; } public Task()
{
CreationTime = Clock.Now;
State = TaskState.Open; ;
} public Task(string title, string description = null) : this()
{
Title = title;
Description = description;
} }
public enum TaskState : byte
{
Open = 0,
Completed = 1
}
}
4,接下来,到EntityFramework中的 XXXDbContext中添加
注意添加引用
using LearningMpaAbp.Tasks;
//TODO: Define an IDbSet for your Entities...
public IDbSet<Task> Tasks { get; set; }
5,最后做数据迁移
打开程序包管理器控制台,默认项目选择Entityframework对应的项目后。执行Add-Migration Add_Task_Entity,创建迁移
创建成功之后会在Migrations下生成一个新的时间+Add_Task_Entity的类
在程序包管理器控制台,输入Update-Database,回车执行迁移。执行成功后,查看数据库,Tasks表创建成功
如果想要注入默认数据
在Migrations文件夹的SeedData文件夹中创建预置数据的类DefaultTestDataForTask
using System.Collections.Generic;
using System.Linq;
using LearningMpaAbp.EntityFramework;
using LearningMpaAbp.Tasks; namespace LearningMpaAbp.Migrations.SeedData
{
public class DefaultTestDataForTask
{
private readonly LearningMpaAbpDbContext _context; private static readonly List<Task> _tasks; public DefaultTestDataForTask(LearningMpaAbpDbContext context)
{
_context = context;
} static DefaultTestDataForTask()
{
_tasks = new List<Task>()
{
new Task("Learning ABP deom", "Learning how to use abp framework to build a MPA application."),
new Task("Make Lunch", "Cook 2 dishs")
};
} public void Create()
{
foreach (var task in _tasks)
{
if (_context.Tasks.FirstOrDefault(t => t.Title == task.Title) == null)
{
_context.Tasks.Add(task);
}
_context.SaveChanges();
}
} }
}
然后在 Migrations下的Configuration类中添加
new DefaultTestDataForTask(context).Create();
程序包管理器控制台,输入Update-Database,回车执行迁移。执行成功后,查看数据库,Tasks表创建成功,且表中已存在两条测试数据。
以上。。。
参考:http://www.jianshu.com/p/fde465ae599d
代码:https://github.com/tianxiangd/LearnAbp
ABP学习入门系列(二)(abp的数据迁移)的更多相关文章
- ABP学习入门系列(四)(创建Service)
一,一些相关解释 Service 在应用服务层也就是application层.应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象 ...
- ABP学习入门系列(五)(展示实现增删改查)
大致要实现的 效果如下 1,添加Controller(用到的X.PagedList 注意到nuget添加) using System.Web.Mvc; using Abp.Application.Se ...
- ABP学习入门系列(三) (领域层中的仓储Repository)
一,仓储定义:“在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象”(Martin Fowler) . 仓储用来操作数据库进行数据存取.仓储接口在领域层定义,而仓储的实现类应该写在基础设施层 ...
- ABP学习入门系列(一)(第一个ABP项目)
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称.ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它 ...
- ABP学习入门系列(六)(菜单和分页)
1,菜单.在最新的abp3.1.2中 菜单栏是在左侧的如下图(上中下的结构),中间部分就是我们要添加菜单的地方. ABP集成了通用的创建和显示菜单的方式,在展示层web下的appstart文件夹下找到 ...
- C语言高速入门系列(二)
C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...
- OPEN(SAP) UI5 学习入门系列之一:扫盲与热身(下)
1 UI5代码结构 上一次我们一起用了20秒的时间完成一个UI5版的Hello World.应用打开后有一个按钮,按钮的文字是Hello World,点击这个按钮之后,按钮会慢慢的消失掉(Fade o ...
- 【转】Pandas学习笔记(二)选择数据
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- C# 互操作性入门系列(二):使用平台调用调用Win32 函数
好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...
随机推荐
- Java中的String,StringBuilder,StringBuffer的区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...
- Day 8 集合与文件的操作
一.创建集合两种方式. 二.添加元素的方式(add.update"属于迭代添加") 一.集合# 1. 集合是无序的,不能重复的.# 2.集合内元素必须是可哈希的.# 3.集合不能更 ...
- Java 日志学习
Java 日志学习,主要学习log4j,(为了查找方便,直接拷贝别人文章:原文:http://www.cnblogs.com/xt0810/p/3659045.html) [结构] java日志对调试 ...
- tomcat 项目发布方式
1.WEB应用的组成结构 开发web应用时,不同类型的文件有严格的存放规则,否则不仅会使web应用无法访问 还会导致web服务器自动报错. mail:web应用所在目录(该目录自定义) html,js ...
- Storm Trident详解
Trident是基于Storm进行实时留处理的高级抽象,提供了对实时流4的聚集,投影,过滤等操作,从而大大减少了开发Storm程序的工作量.Trident还提供了针对数据库或则其他持久化存储的有状态的 ...
- iOS 关于布局问题的一些认识
///更新约束和布局 更新约束布局相关的API - (void)updateConstraintsIfNeeded 调用此方法,如果有标记为需要重新布局的约束,则立即进行重新布局,内部会调用upda ...
- spring基础回顾
1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- jQuery过滤选择器:first和:first-child的区别,CSS伪类:first-child
最近项目中遇到需求:只在第一列不能删除,不显示小叉号:点击可添加一列,后面的列右上角显示小叉号,可以点击删除. 我是使用以下方法解决这个小需求 :CSS伪类选择器:first-child设置所有小叉号 ...
- 面试题:js如何渲染十万条数据并不卡住界面
这道题考察了如何在不卡住页面的情况下渲染数据,也就是说不能一次性将几万条都渲染出来,而应该一次渲染部分 DOM,那么就可以通过 requestAnimationFrame 来每 16 ms 刷新一次. ...
- MVC的默认约定
MVC项目中有很多默认约定,一种是对项目目录分配的约定,比如默认情况下需要将Javascript文件放置在Script文件夹中,但这并不妨碍你将这个文件夹重新命名,也可以将整个文件夹放置到任何想要放置 ...