三、定义主从实体基类

简介:

三、定义主从实体基类

 

定义主从实体基类的原因是我希望在类的定义时,可以很明确的了解类之间的主从关系。

 

 

 

3.1定义主表基类

定义PrimaryDataEntityBase

 
  1. /// <summary>  
  2. /// 描述主从表的主表的数据实体  
  3. /// </summary>  
  4. /// <typeparam name="ID">主表实体的主键ID</typeparam>  
  5. /// <typeparam name="P">主表</typeparam>  
  6. /// <typeparam name="F">从表</typeparam>  
  7. public abstract class PrimaryDataEntityBase<ID, P, F> : EntityBase<P, ID>  
  8.     where P : PrimaryDataEntityBase<ID, P, F>  
  9.     where F : ForeignDataEntityBase<ID, P, F>  
  10. {  
  11.     /// <summary>  
  12.     /// PrimaryDataEntityBase的默认构造函数  
  13.     /// </summary>  
  14.     public PrimaryDataEntityBase()  
  15.     {  
  16.     }  
  17.     /// <summary>  
  18.     /// 按table的第一行数据进行属性的初始化  
  19.     /// </summary>  
  20.     /// <param name="table"></param>  
  21.     public PrimaryDataEntityBase(System.Data.DataTable table)  
  22.         : this(table, 0)  
  23.     {  
  24.     }  
  25.     /// <summary>  
  26.     /// 按table的指定行数据进行属性的初始化  
  27.     /// </summary>  
  28.     /// <param name="table"></param>  
  29.     /// <param name="indexRow"></param>  
  30.     public PrimaryDataEntityBase(System.Data.DataTable tableint indexRow)  
  31.         : base(table, indexRow)  
  32.     {  
  33.     }  
  34.     /// <summary>  
  35.     /// 装载当前从表的详细项  
  36.     /// </summary>  
  37.     protected abstract List<F> LoadDetailedItems();  
  38.     /// <summary>  
  39.     /// 存放外键表的数据项目的集合  
  40.     /// </summary>  
  41.     protected List<F> items = new List<F>();  
  42.     /// <summary>  
  43.     /// 获取外键表数据的集合  
  44.     /// </summary>  
  45.     public List<F> DetailedItems  
  46.     {  
  47.         get  
  48.         {  
  49.             return LoadDetailedItems();  
  50.         }  
  51.     }  
  52.     /// <summary>  
  53.     /// 返回外键表的数据项目数量  
  54.     /// </summary>  
  55.     public int DetailedItemCount  
  56.     {  
  57.         get  
  58.         {  
  59.             return items.Count;  
  60.         }  
  61.     }  
  62.     /// <summary>  
  63.     /// 将一个外键实体加入集合  
  64.     /// </summary>  
  65.     /// <param name="item"></param>  
  66.     /// <returns></returns>  
  67.     public abstract void Add(F item);  
  68.     /// <summary>  
  69.     /// 从集合中移除一个外键实体  
  70.     /// </summary>  
  71.     /// <param name="item"></param>  
  72.     public abstract void Remove(F item);  
  73.     /// <summary>  
  74.     /// 从集合中移除一个外键实体  
  75.     /// </summary>  
  76.     /// <param name="index"></param>  
  77.     public abstract void RemoveAt(int index);  
  78.     /// <summary>  
  79.     /// 返回或设置匹配索引的订单详细项  
  80.     /// </summary>  
  81.     /// <param name="index"></param>  
  82.     /// <returns></returns>  
  83.     public abstract F this[int index]  
  84.     {  
  85.         set;  
  86.         get;  
  87.     }  

3.2定义从表基类

定义ForeignDataEntityBase

 
  1. /// <summary>  
  2. /// 描述主从表的从表的数据实体  
  3. /// </summary>  
  4. /// <typeparam name="ID">从表实体的主键ID</typeparam>  
  5. /// <typeparam name="P">主表</typeparam>  
  6. /// <typeparam name="F">从表</typeparam>  
  7. public abstract class ForeignDataEntityBase<ID, P, F> : EntityBase<F, ID>  
  8.     where P : PrimaryDataEntityBase<ID, P, F>  
  9.     where F : ForeignDataEntityBase<ID, P, F>  
  10. {  
  11.     /// <summary>  
  12.     /// ForeignDataEntityBase的默认构造函数  
  13.     /// </summary>  
  14.     public ForeignDataEntityBase()  
  15.     {  
  16.     }  
  17.     /// <summary>  
  18.     /// 按table的第一行数据进行属性的初始化  
  19.     /// </summary>  
  20.     /// <param name="table"></param>  
  21.     public ForeignDataEntityBase(System.Data.DataTable table)  
  22.         : this(table, 0)  
  23.     {  
  24.     }  
  25.     /// <summary>  
  26.     /// 按table的指定行数据进行属性的初始化  
  27.     /// </summary>  
  28.     /// <param name="table"></param>  
  29.     /// <param name="indexRow"></param>  
  30.     public ForeignDataEntityBase(System.Data.DataTable tableint indexRow)  
  31.         : base(table, indexRow)  
  32.     {  
  33.     }  
  34.     /// <summary>  
  35.     /// 对应主键实体  
  36.     /// </summary>  
  37.     [System.ComponentModel.DataObjectField(falsefalsefalse)]  
  38.     public P RelationOrder  
  39.     {  
  40.         set;  
  41.         get;  
  42.     }  

3.3使用主从表基类

 
  1. /// <summary>  
  2. /// 客户委托单  
  3. /// </summary>  
  4. [System.ComponentModel.DataObject(true)]  
  5. public class BusinessOrder : LogisticsOrderBase<BusinessOrder, BusinessOrderItem>  
  6. {  
  7. }  
  8. /// <summary>  
  9. /// 委托单详细  
  10. /// </summary>  
  11. [System.ComponentModel.DataObject(true)]  
  12. public class BusinessOrderItem : DetailedItemBase<BusinessOrder, BusinessOrderItem>  
  13. {  

现在我们的类在定义的时候,就可以非常明确的描述了主从实体的关系,并拥有了数据自动属性装载的能力。



本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/805772


相关文章
|
数据采集 存储 传感器
IoT物联网设备端硬件上云技术方案详解
IoT物联网设备端硬件上云技术方案详解
9261 15
2025年 | 1月云大使推广奖励规则
【近期云大使规则升级】①上线企业云大使提现功能。②增加返利订单类目。③优化推广奖励限制。④提升首购后订单返利比例。⑤新增沉睡用户返利 。⑥推荐企业认证新用户首购最高奖励45%。
2025年 | 1月云大使推广奖励规则
|
9月前
|
JSON 监控 API
1688商品列表API接口指南
1688 商品列表 API 可帮助开发者和商家获取商品基本信息(如 ID、名称、价格等)、支持筛选排序(类目、价格、销量等条件)、分页查询及指定店铺商品获取,便于商品管理与竞品分析。调用流程包括:注册账号创建应用以获取 App Key 和 App Secret、生成签名确保请求合法性、构造请求参数(含 app_key、sign 等)、发送 HTTP 请求并处理 JSON 响应数据。
395 19
|
11月前
|
人工智能 物联网 编译器
《近阈值计算:硬件加速芯片的低功耗密码》
近阈值计算(NTC)技术通过将晶体管工作电压降至接近阈值电压,有效降低功耗并提升芯片性能,成为硬件加速芯片领域的研究热点。NTC优化了电路设计、器件选型和系统级协同设计,采用流水线技术和冗余设计提高稳定性和可靠性。尽管面临性能、稳定性和设计复杂性的挑战,NTC为低功耗高性能芯片提供了新方向,推动人工智能、物联网等领域的发展。
403 15
|
10月前
|
人工智能 并行计算 Java
一文彻底搞清楚数字电路中的运算器
运算器(ALU)是数字电路的核心组件,负责执行算术和逻辑运算。其设计直接影响计算机系统的性能与效率。本文详细介绍了运算器的基本结构、功能分类、设计原理及实现方法。通过分析1位全加器、多位加法器、减法器的设计,结合74LS181N芯片和Logisim仿真工具的应用,展示了4位加/减法运算器的实现案例。同时探讨了多级运算器集成、标志位应用及现代优化方向,如超前进位加法器和并行计算技术。运算器的设计需兼顾功能完备性和性能优化,未来将向更高集成度和更低功耗发展。
1336 0
|
关系型数据库 MySQL Linux
倚天服务器与X86服务器业务部署差异
倚天服务器是一种基于ARM架构的服务器,与传统的X86服务器在硬件架构、操作系统和软件环境等方面存在一定的差异。本报告将重点从操作系统和软件安装包的版本差异两个方面进行详细说明。
687 56
|
数据采集 存储 数据挖掘
TMDB电影数据分析(下)
TMDB电影数据分析(下)
1065 0
|
存储 人工智能 缓存
【AI系统】核心计算之矩阵乘
本文探讨了AI模型中矩阵乘运算的优化实现及其在AI芯片设计中的重要性。文章首先介绍了卷积操作如何转化为矩阵乘,接着阐述了矩阵乘的分块(Tiling)技术以适应芯片内存限制,最后总结了几种常见的矩阵乘优化方法,包括循环优化、分块矩阵乘法、SIMD指令优化等,旨在提高计算效率和性能。
560 0
|
数据可视化 项目管理
项目管理怎么做?四大项目管理模型详解,让你的项目不再“忙而无效”!
本文介绍四大经典项目管理模型:瀑布模型(适合需求明确的项目)、Scrum模型(适合需求频繁变化的项目)、增量模型(分阶段推进,逐步完成)和风险管理模型(防患于未然)。同时推荐几款常用工具,如板栗看板、Trello和Asana,帮助团队更高效地协作。
515 0
|
Unix Linux
在Linux中,什么是 CLI?
在Linux中,什么是 CLI?

热门文章

最新文章