创建实体类

简介:

上一篇博客,我们使用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,如需转载请自行联系原作者

目录
相关文章
|
编译器 C# 开发者
C# 9.0中的顶级语句:简化程序入口的新特性
【1月更文挑战第13天】本文介绍了C# 9.0中引入的顶级语句(Top-level statements)特性,该特性允许开发者在不使用传统的类和方法结构的情况下编写简洁的程序入口代码。文章详细阐述了顶级语句的语法、使用场景以及与传统程序结构的区别,并通过示例代码展示了其在实际应用中的便捷性。
|
Linux 虚拟化 Docker
Windows10安装Docker Desktop(大妈看了都会)
Windows10安装Docker Desktop(大妈看了都会)
1404 2
|
算法 Windows
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
在一般能搜到的所有实现圆角窗体的示例中,都有着惨不忍睹的锯齿...而借助于Layered Windows,是可以实现丝滑无锯齿效果的Form窗体的,其具体原理就是分层窗体....
2115 0
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
|
9月前
|
NoSQL 前端开发 MongoDB
Mock神器:Easy-Mock 私有化部署及使用介绍
Easy-Mock 是一个非常实用的模拟数据工具,尤其在前后端分离开发的场景中,可以极大地提高前端开发效率。通过将 Easy-Mock 部署为私有化服务,你可以完全掌控模拟数据的生成和管理,同时保障数据的安全性和隐私性。
524 44
|
开发框架 .NET API
.NET 体系概览图集 - 2024 最全总结
.NET Core 是一个免费、跨平台、开源的开发平台,用于一站式构建不同类型的应用程序。 .NET Core 是以 .NET Framework 为基础,但是经过重新设计、实现的的新一代框架,实现了原 .NET Framework 中的几乎所有功能,核心特点就是开源、跨平台。
662 0
.NET 体系概览图集 - 2024 最全总结
|
缓存 关系型数据库 MySQL
【异常解决】缓存报错:Null key returned for cache operation (maybe you are using named params on classes withou
【异常解决】缓存报错:Null key returned for cache operation (maybe you are using named params on classes withou
1259 0
|
缓存 前端开发 JavaScript
浏览器报错:net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
浏览器报错:net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
1929 0
|
Shell Windows
解决 Win11 打开文件夹很慢-资源管理器卡顿
解决 Win11 打开文件夹很慢-资源管理器卡顿
2110 0
|
网络安全 数据安全/隐私保护 Windows
win如何使用MobaXterm优雅的远程电脑
win如何使用MobaXterm优雅的远程电脑
2841 0
win如何使用MobaXterm优雅的远程电脑