创建实体类

简介:

上一篇博客,我们使用ABP模板创建了一个解决方案。现在,打开该解决方案,目录图如下:

QQ图片20151030142234

下面直奔今天的主题——《创建实体类》。

一点小插曲:接触ABP框架之前,一直都是使用的EF的DBFirst,在那种模式下,我们只要设计好数据库,然后直接通过模板就生成了实体层,甚至都没怎么留意实体层的代码是什么样子。现在要使用CodeFirst,就要反过来,先要写代码了,真有点不适应。好吧,为了学好ABP,也要硬着头皮看看这其中的代码到底啥模样,但我这里不一定一行一行地敲哦,毕竟我这个系统就20多个实体左右,说不定以后还会增加,一个一个敲太费时间了。格外注意哦:在操作代码之前,先打开Nuget工具,还原所有没有加载成功的程序集。

理论学习:

ABP框架提供了一个定义了Id属性的Entity类。我们可以通过继承此类来让自己的实体类拥有这个属性,注意一点的是,这个Id是Int 32类型的。如果你的类的Id类型不是该类型,不要紧,ABP框架还提供了这个类的泛型Entity<T>,这里的T可以是任何你想要的类型。

动手实践:

我这里有很多之前已经设计好的表,然后我直接通过动软代码生成器从数据库中生成这些实体类。至于使用动软代码生成器的详细步骤,不是这里讨论的重点,有兴趣的园友可以自己动手找一下这方面的资料。

image

在生成代码之前,我必须定义一个实体类的模板Entity.cmt,我的模板代码如下:

复制代码
<#@ template language="c#" HostSpecific="True" #>
<#@ output extension= ".cs" #>
<#
    TableHost host = (TableHost)(Host);
    host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
#>
using System;
using Abp.Domain.Entities;

namespace Noah.ChargeStation.Entities<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #>
{
    <# if( host.TableDescription.Length > 0) {#>
     //<#= host.TableDescription #>
    <# } #>
    public class <#= host.GetModelClass(host.TableName) #>:Entity
    {
    
          <# foreach (ColumnInfo c in host.Fieldlist)
        {  if(c.ColumnName!="Id")
         {
             #>/// <summary>
        /// <#= string.IsNullOrEmpty(c.Description)  ? c.ColumnName : c.Description #>
        /// </summary>
        public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) {  #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName
))){ #>?<# }#><# }#> <#= c.ColumnName #>
        {
            get; 
            set; 
        } 
         
           
        <# }} #>
        public <#= host.GetModelClass(host.TableName) #>()
        {
        
        }
   
    }
    
}
复制代码

接下来就是操作动软代码生成器生成大量的实体类了。

image

生成之后,将代码放到项目中的领域层,下图就是我生成的代码了。

 

说明:用模版生成的解决方案,其中的每个项目默认都只是以"公司名.项目名"为命名空间的前缀,比如,我这里实体类的默认命名空间是“Noah.ChargeStation.Entities”,但我更喜欢这种命名方式“Noah.ChargeStation.Core.Entities”。所以,自己要手动改一下项目的默认命名空间,以后添加的文件都会更正了,但之前已经创建的文件还要手动修改。

生成实体类的工作就完成了,下一篇我们创建DbContext。






本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/4923137.html,如需转载请自行联系原作者

目录
相关文章
|
6天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
17天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1327 7
|
5天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
300 129
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
16天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1396 87
|
4天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
5天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
298 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
5天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
232 82
2025年阿里云域名备案流程(新手图文详细流程)