Dapper 在继承层次结构中处理数据

news/2024/5/19 3:24:31/文章来源:https://www.cnblogs.com/friend/p/16754112.html

Dapper 包含一项功能,用于处理可能逐行映射到不同类型的数据。在处理使用Table Per Hierarchy存储模式的继承层次结构时,此功能特别有用,即一个表用于表示层次结构中的所有类。“鉴别器”列用于区分类型。

以下类定义表示基于抽象Contract类型的继承层次结构。还定义了三种派生类型,代表通信/媒体业务提供的不同类型的合同。ContractType属性充当鉴别器。

public abstract class Contract
{public int ContractId { get; set; }public DateTime StartDate { get; set; }public int DurationMonths { get; set;}public decimal Charge { get; set; }public ContractType ContractType { get; set; }public int CustomerId { get; set; }
}public class MobileContract : Contract
{public MobileContract() => ContractType = ContractType.Mobile;public string MobileNumber { get; set; }
}public class TvContract : Contract
{public TvContract() => ContractType = ContractType.TV;public TVPackageType TVPackageType { get; set; }
}public class BroadBandContract : Contract
{public BroadBandContract() => ContractType = ContractType.Broadband;public int DownloadSpeed { get; set; }
}public enum TVPackageType
{S, M, L, XL
}public enum ContractType
{Mobile = 1, TV, Broadband 
}

  这些类映射到具有以下架构(SQLite)的单个表:

 

 以下代码显示了如何使用ExecuteReaderGetRowsParser<T>方法根据当前正在读取的合约类型填充三个集合:

var tvContracts = new List<TvContract>();
var mobileContracts = new List<MobileContract>();
var broadbandContracts = new List<BroadbandContract>();var sql = @"select * from contracts";
using (var connection = new SQLiteConnection(connString))
using (var reader = connection.ExecuteReader(sql))
{var tvContractParser = reader.GetRowParser<TvContract>();var mobileContractParser = reader.GetRowParser<MobileContract>();var broadbandContractParser = reader.GetRowParser<BroadbandContract>();while(reader.Read()){var discriminator = (ContractType)reader.GetInt32(reader.GetOrdinal(nameof(ContractType)));switch(discriminator){case ContractType.TV:tvContracts.Add(tvContractParser(reader));break;case ContractType.Broadband:broadbandContracts.Add(broadbandContractParser(reader));break;case ContractType.Mobile:mobileContracts.Add(mobileContractParser(reader));break;}}
}
Console.WriteLine("TV Contracts");
tvContracts.ForEach(c => Console.WriteLine($"Duration: {c.DurationMonths} months, Package Type: {c.TVPackageType.ToString()}"));
Console.WriteLine("Broadband Contracts");
broadbandContracts.ForEach(c => Console.WriteLine($"Duration: {c.DurationMonths} months, Cost: {c.Charge}, Download: {c.DownloadSpeed} Mbps"));
Console.WriteLine("Mobile Contracts");
mobileContracts.ForEach(c => Console.WriteLine($"Duration: {c.DurationMonths} months, Number: {c.MobileNumber}"));

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_18296.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16.python实现线性单元和梯度下降-10月4日编程作业-Relu函数

目录 课堂笔记 代码实现1 运行结果1 代码实现2 评定一个学生的综合绩点 运行结果2 小结 课堂笔记 代码实现1 from cgi import print_environ from functools import reduce import numpy as np#定义感知器类 class perceptron(object):#感知器初始化函数(参数个数&…

ASP.NET Core--项目基础与搭建

文章目录项目基础与搭建创建项目ViewImports.cshtmlappsettings.json执行顺序Program.cs类startup.cs类项目基础与搭建 创建项目 ViewImports.cshtml ViewImports文件可以影响文件夹层次结构中的所有视图 ViewImports文件是我们可以编写代码并放置通用指令以引入我们的视图所需…

数据结构 - 单链表

文章目录一、单链表1.单链表的定义1.1概念介绍2.如何用代码来定义一个单链表*知识点3.单链表的插入删除未完待续...一、单链表 1.单链表的定义 单链表是一种链式存取的数据结构&#xff0c;用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的&…

Halcon快速入门笔记3

read_image (Image, ‘surface_scratch’) invert_image (Image, ImageInverted) get_image_size (ImageInverted, Width, Height) gen_sin_bandpass (ImageBandpass, 0.4, ‘none’, ‘dc_center’, Width, Height) fft_generic (ImageInverted, ImageFFT, ‘to_freq’, -…

【JavaWeb】前置知识:CSS与JavaScript知识汇总

本文被 系统学习JavaWeb 收录&#xff0c;点击订阅 写在前面 大家好&#xff0c;我是黄小黄&#xff01;经过上一篇 从Html入门JavaWeb 的学习&#xff0c;想必大家对标签都有了一定的认识。本文将通过案例&#xff0c;讲解CSS与JavaScript的基础知识&#xff0c;文章内容比较…

SSM+Vue个人健康管理系统 个人健康档案系统 个人健康信息管理系统Java

SSM+Vue个人健康管理系统 个人健康档案系统 个人健康信息管理系统Java💖🔥作者主页:计算机毕设老哥🔥 💖精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻Java实战项目专栏 Python实战项目专栏 安卓实战项目专栏 微信小程序实战项目专栏目录Java实战项…

【数据结构从0到1】第九篇:图

文章目录一、图的基本概念二、图的存储结构2.1 邻接矩阵2.2 邻接表三、图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历四、最小生成树4.1 Kruskal算法4.2 Prim算法五、最短路径5.1 单源最短路径--Dijkstra算法5.2 单源最短路径--Bellman-Ford算法5.3 多源最短路径--Floyd-W…

基于Java开发的五子棋游戏APP设计与实现

目录 一、项目概述 1 &#xff08;一&#xff09;安卓游戏发展趋势 1 &#xff08;二&#xff09;开发安卓游戏的意义 1 二、项目需求分析 2 &#xff08;一&#xff09;功能需求分析 2 &#xff08;二&#xff09;性能需求分析 2 &#xff08;三&#xff09;可行性分析 3 &…

【点云处理】点云法向量估计及其加速(1)

点云法向量是3D点云一个极其重要的几何表面特征&#xff0c;众多的点云处理算法都依赖精确的法向量估计&#xff0c;例如点云分割&#xff0c;点云去噪等。在自动驾驶领域&#xff0c;面对特殊场景我们主要依赖点云法向量进行场景分割。估计点云法向量需要得到该点的邻域内点&a…

nodejs+vue+elementui幼儿园管理系统python java php

本设计主要分为学生家长&#xff0c;管理员和教师三个角色&#xff0c;其中学生家长功能有注册登查看幼儿信息&#xff0c;查看缴费信息&#xff0c;申请请假&#xff0c;查看体检信息等&#xff1b;教师的功能有登陆系统&#xff0c;对自己的幼儿学生&#xff0c;班级&#xf…

谷粒商城 集群篇 (二) --------- K8s 集群安装

目录一、kubeadm二、前置要求三、部署步骤四、环境准备五、安装环境1. 安装 docker① 卸载 docker② 安装 Docker-CE③ 配置 docker 加速④ 启动 docker & 设置 docker 开机自启2. 添加阿里云 yum 源3. 安装 kubeadm&#xff0c;kubelet 和 kubectl六、部署 k8s-master1. m…

STL之string

更新string&#xff0c;这段时间学习了stl&#xff0c;发现共性的东西很多&#xff0c;string&#xff0c;vector&#xff0c;list等&#xff0c;弄懂他们的逻辑框架很重要&#xff0c;其实也是stl的规范&#xff0c;文章更新内容不管这些函数怎么用&#xff0c;就从大逻辑来讲…

Java项目:SSH土地信息管理系统平台

作者主页&#xff1a;夜未央5788 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员与用户两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,分类管理,档案管理等功能。 用户角色包含…

基于STM32的光敏传感器数据采集系统-物联网应用系统设计项目开发

目录1 项目概述1.1 项目介绍1.2 项目开发环境1.3 小组人员及分工2 需求分析2.1 系统需求分析2.2 可行性分析2.3 项目实施安排3 系统硬件设计3.1 系统整体硬件电路设计3.2 STM32 最小系统电路设计3.3 传感器模块电路设计3.4 光敏电阻模块电路设计4系统软件设计4.1 系统整体流程设…

源码、反码、补码和精度损失

数据类型转换,转换过程中可能导致溢出或损失精度 1.源码:源码就是二进制的数字并且开头的一位代表符号位。例:(+1)的源码:0000 0001(-1)的源码:1000 0001 2.反码:正数的反码是其本身负数的反码是符号位不懂其他位取反例: (+1)的反码:0000 0001(-1)的反码:1111 …

TC8:TCP_CLOSING_03-13

TCP_CLOSING_03: RST with DATA 目的 TCP允许接收的RST消息包含数据 测试步骤 Tester:让DUT移动到ESTABLISHED状态Tester:发送RST报文,包含一些数据DUT:不发送任何响应Tester:验证DUT在CLOSED状态期望结果 3, DUT:不发送任何响应 4, Tester:验证DUT在CLOSED状态 CANoe …

谷歌味儿

咱们从小就被教育过&#xff0c;决定一个人成败的最重要因素不是智商、暂时的能力&#xff0c;而是性格和品质。这是如此的正确&#xff0c;以至于很多公司暗暗将这个作为候选人的衡量标准。比如咱们常听到的“X里味儿”。今天咱们看看“谷歌味儿“。谷歌内部明确要求的三大品质…

spring:beanfactory与applicationcontext的设计

beanfactory接口提供的方法:getBean,getBeanProvider,containsBean,isSingleton,getType,getAliases listableBeanFactory: 不会取到手动注册的bean,为什么要这么做呢,因为有些bean属于 SpringFramework 内部使用的,这样做的目的是 SpringFramework 不希望咱开发者直接…

恶意代码分析实战 windbg内核恶意代码分析 lab 10-1 10-2 10-3

Lab 10-01 本实验包括一个驱动程序和一个可执行文件。你可以从任意位置运行可执行文件,但为了使程序能够正常运行,必须将驱动程序放到C:\Windows\System32目录下,这个目录在受害者计算机中已经存在。可执行文件是Lab10-01.exe,驱动程序是Lab 10-01.sys. 问题 1.这个程序是否…

公众号网课搜题接口使用-公众号使用

公众号网课搜题接口使用-公众号使用 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&…