网站应该如何进行优化,北京所有做招聘类网站建站公司,旅游网站开发选题背景,怎么删掉安装的wordpress这一节我们主要和领域层打交道。首先我们要对ABP的体系结构以及从模板创建的解决方案进行一一对应。网上有代码生成器去简化我们这一步的任务#xff0c;但是不建议初学者去使用。
一、首先来看看ABP体系结构 ABP体系结构
领域层就是业务层#xff0c;是一个项目的核心但是不建议初学者去使用。
一、首先来看看ABP体系结构 ABP体系结构
领域层就是业务层是一个项目的核心所有业务规则都应该在领域层实现。实体Entity 实体代表业务领域的数据和操作在实践中通过用来映射成数据库表。仓储Repository 仓储用来操作数据库进行数据存取。仓储接口在领域层定义而仓储的实现类应该写在基础设施层。领域服务Domain service 当处理的业务规则跨越两个及以上实体时应该写在领域服务方法里面。领域事件Domain Event 在领域层有些特定情况发生时可以触发领域事件并且在相应地方捕获并处理它们。工作单元Unit of Work 工作单元是一种设计模式用于维护一个由已经被修改(如增加、删除和更新等)的业务对象组成的列表。它负责协调这些业务对象的持久化工作及并发问题。
二、再来看看解决方案 解决方案
确定了解决方案下每个项目分别对应那一层后我们开始创建Task实体。
三、创建Task实体
1.在领域层创建Tasks文件夹并创建Task实体类 2.ABP中所有的实体类都继承自Entity而Entity实现了IEntity接口而IEntity接口是一个泛型接口通过泛型指定主键Id类型默认的Entity的主键类型是int类型。 创建Task肯定需要保存创建时间可以通过实现审计模块中的IHasCreationTime来实现这种通用功能。代码如下 namespace LearningMpaAbp.Tasks
{public class Task : Entity, IHasCreationTime{public const int MaxTitleLength 256;public const int MaxDescriptionLength 64 * 1024;//64kbpublic 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}
}其中定义了TaskState状态枚举。并添加了AssignedPerson导航属性用来保存分配任务到某个用户。其中[Required]、[MaxLength]特性是用来进行输入校验的。
3.定义好实体之后我们就要去DbContext中定义实体对应的DbSet以应用Code First 数据迁移。找到我们的基础服务层即以EntityFramework结尾的项目中找到DbContext类添加以下代码 //TODO: Define an IDbSet for your Entities...public IDbSetTask Tasks { get; set; }4.执行Code First数据迁移。
打开程序包管理器控制台默认项目选择Entityframework对应的项目后。执行Add-Migration Add_Task_Entity创建迁移。创建成功后会在Migrations文件夹下创建时间_Add_Task_Entity格式的类文件。如果注意观察我们会发现Migrations文件夹下有个SeedData文件夹顾名思义这个文件夹下的类主要是用来进行预置种子数据的。我们可以参照已有类的写法来预置两条Task。创建DefaultTestDataForTask类代码如下namespace LearningMpaAbp.Migrations.SeedData
{public class DefaultTestDataForTask{private readonly LearningMpaAbpDbContext _context;private static readonly ListTask _tasks;public DefaultTestDataForTask(LearningMpaAbpDbContext context){_context context;}static DefaultTestDataForTask(){_tasks new ListTask(){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();}}}
}然后在Configuration类中的Seed方法中添加以下代码。 new DefaultTestDataForTask(context).Create();在程序包管理器控制台输入Update-Database回车执行迁移。执行成功后查看数据库Tasks表创建成功且表中已存在两条测试数据。至此Task实体类成功创建。 源码已上传至Github-LearningMpaAbp可自行参考。 作者圣杰 链接https://www.jianshu.com/p/fde465ae599d 来源简书 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。