ABP入门系列之3——创建实体/Code First创建数据表

一、首先来看看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来实现这种通用功能。代码如下:

using Abp.Domain.Entities;
using Abp.Domain.Entities.Auditing;
using MyProject.Authorization.Users;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyProject.Tasks
{
    public class Task : Entity, IHasCreationTime
    {
        public const int MaxTitleLength = 256;
        public const int MaxDescriptionLength = 64 * 1024;

        public long? AssignePersonId { get; set; }

        [ForeignKey("AssignePersonId")]
        public User AssignePerson { 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 = DateTime .Now;
            State = TaskState.Open; ;
        }

        public Task(string title, string description = null) : this()
        {
            Title = title;
            Description = description;
        }

    }
    public enum TaskState : byte
    {
        Open = 0,
        Completed = 1
    }
}
View Code

其中定义了TaskState状态枚举。并添加了AssignedPerson导航属性,用来保存分配任务到某个用户。其中[Required]、[MaxLength]特性是用来进行输入校验的。

3.定义好实体之后,我们就要去DbContext中定义实体对应的DbSet,以应用Code First 数据迁移。找到我们的基础服务层,即以EntityFramework结尾的项目中,找到DbContext类,添加以下代码

 

4.执行Code First数据迁移。

  • 打开程序包管理器控制台,默认项目选择Entityframework对应的项目后。执行Add-Migration Add_Task_Entity,创建迁移。
  • 创建成功后,会在Migrations文件夹下创建时间_Add_Task_Entity格式的类文件。如果注意观察,我们会发现Migrations文件夹下有个SeedData文件夹,顾名思义,这个文件夹下的类主要是用来进行预置种子数据的。我们可以参照已有类的写法,来预置两条Task。创建DefaultTestDataForTask类,代码如下:
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MyProject.EntityFramework;
    using MyProject.MultiTenancy;
    using MyProject.Tasks;
    
    namespace MyProject.Migrations.SeedData
    {
        public class DefaultTestDataForTask
        {
            private readonly MyProjectDbContext _context;
            private static readonly List<Task> _tasks;
    
            public DefaultTestDataForTask(MyProjectDbContext 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)
                {
                    _context.Tasks.Add(task);
                    _context.SaveChanges();
                }
            }
        }
    }
    View Code

然后在Configuration类中的Seed方法中,添加以下代码。

  • 在程序包管理器控制台,输入Update-Database,回车执行迁移。执行成功后,查看数据库,Tasks表创建成功,且表中已存在两条测试数据。

至此,Task实体类成功创建。

转载于:https://www.cnblogs.com/become/p/10180265.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABP创建MySQL数据库的步骤如下: 1. 首先,使用ABP提供的项目模板创建一个新的项目。该模板提供了Module Zero项目,其中包含了用户、角色、权限等通用功能。然而,使用该模板连接MySQL可能会导致错误,无法正常运行。 2. 为了解决ABP+MySQL的问题,需要进行一些修改。打开源代码中的`DYDbContextConfigurer`类,该类用于配置数据库连接。在该类中,找到`Configure`方法,并将其中的代码修改如下: ```csharp public static class DYDbContextConfigurer { public static void Configure(DbContextOptionsBuilder<DYDbContext> builder, string connectionString) { builder.UseMySql(connectionString, new MySqlServerVersion(new System.Version(5, 0))); } public static void Configure(DbContextOptionsBuilder<DYDbContext> builder, DbConnection connection) { builder.UseMySql(connection, new MySqlServerVersion(new System.Version(5, 0))); } } ``` 3. 接下来,打开Web项目的Web.config文件。由于上一步添加了`MySql.Data.Entity`,所以Web.config已经添加了MySQL的相关配置。在Web.config中,找到连接字符串部分,注释掉SQL Server的连接字符串,并添加新的MySQL连接字符串。 通过以上步骤,你就可以成功创建ABP项目的MySQL数据库了。请确保你已经正确配置了MySQL数据库,并提供了正确的连接字符串。 #### 引用[.reference_title] - *1* *3* [使用ABP EntityFramework连接MySQL数据库](https://blog.csdn.net/weixin_31292909/article/details/113164152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ABP框架数据库改为MySQL](https://blog.csdn.net/daiyue945/article/details/128236930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值