继承映射关系 TPH、TPT、TPCEntityFramework6.0
每个类型一张表【TPT】
声明方式
public class Business{[Key]public int BusinessId { get; protected set; }public string Name { get; set; }public string LicenseNumber { get; set; }}public class Retail : Business{public string Address { get; set; }public string City { get; set; }public string State { get; set; }public string ZIPCode { get; set; }} public class eCommerce : Business{public string URL { get; set; }}public class BusinessesContext : DbContext{public DbSet<Business> Businesses { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.Entity<Business>().Property(b=>b.BusinessId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);modelBuilder.Entity<Business>().ToTable("Business", "halower");modelBuilder.Entity<Retail>().ToTable("Retail", "halower");modelBuilder.Entity<eCommerce>().ToTable("eCommerce", "halower");}}
怎么使用
private static void Main(string[] args){using (var context = new BusinessesContext()){var retail = new Retail{Name = "Shop and Save",LicenseNumber = "200C",Address = "101 Main",City = "Anytown",State = "TX",ZIPCode = "76106"};context.Businesses.Add(retail);var web = new eCommerce{Name = "BuyNow.com",LicenseNumber = "300AB",URL = "www.buynow.com"};context.Businesses.Add(web);context.SaveChanges();}using (var context = new BusinessesContext()){Console.WriteLine("\n--- All Businesses ---");foreach (var b in context.Businesses){Console.WriteLine("{0} (#{1})", b.Name, b.LicenseNumber);}Console.WriteLine("\n--- Retail Businesses ---");//OfType<T>:根据指定类型筛选foreach (var r in context.Businesses.OfType<Retail>()){Console.WriteLine("{0} (#{1})", r.Name, r.LicenseNumber);Console.WriteLine("{0}", r.Address);Console.WriteLine("{0}, {1} {2}", r.City, r.State, r.ZIPCode);}Console.WriteLine("\n--- eCommerce Businesses ---");foreach (var e in context.Businesses.OfType<eCommerce>()){Console.WriteLine("{0} (#{1})", e.Name, e.LicenseNumber);Console.WriteLine("Online address is: {0}", e.URL);}Console.ReadKey();}}
生成表结构
运行效果
每个继承层次一张表【TPH】
声明方式
public abstract class Employee{public int EmployeeId { get; protected set; }public string FirstName { get; set; }public string LastName { get; set; }}public class FullTimeEmployee : Employee{public decimal? Salary { get; set; }}public class HourlyEmployee : Employee{public decimal? Wage { get; set; }}public class EmployeeContext: DbContext{public DbSet<Employee> Employees { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.Entity<Employee>().HasKey(e => e.EmployeeId).Property(e => e.EmployeeId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);modelBuilder.Entity<Employee>().Map<FullTimeEmployee>(m => m.Requires("EmployeeType").HasValue(1)).Map<HourlyEmployee>(m => m.Requires("EmployeeType").HasValue(2));}
怎么使用
private static void Main(string[] args){using (var context = new EmployeeContext()){var fte = new FullTimeEmployee{FirstName = "Jane",LastName = "Doe",Salary = 71500M};context.Employees.Add(fte);fte = new FullTimeEmployee{FirstName = "John",LastName = "Smith",Salary = 62500M};context.Employees.Add(fte);var hourly = new HourlyEmployee{FirstName = "Tom",LastName = "Jones",Wage = 8.75M};context.Employees.Add(hourly);context.SaveChanges();}using (var context = new EmployeeContext()){Console.WriteLine("--- All Employees ---");foreach (var emp in context.Employees){bool fullTime = !(emp is HourlyEmployee);Console.WriteLine("{0} {1} ({2})", emp.FirstName, emp.LastName,fullTime ? "Full Time" : "Hourly");}Console.WriteLine("--- Full Time ---");foreach (var fte in context.Employees.OfType<FullTimeEmployee>()){Console.WriteLine("{0} {1}", fte.FirstName, fte.LastName);}Console.WriteLine("--- Hourly ---");foreach (var hourly in context.Employees.OfType<HourlyEmployee>()){Console.WriteLine("{0} {1}", hourly.FirstName, hourly.LastName);}}Console.ReadKey();}
生成表结构
运行效果
每个子类一张表【TPC】
声明方式
protected override void OnModelCreating(DbModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.Entity<Employee>().HasKey(e => e.EmployeeId).Property(e => e.EmployeeId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);modelBuilder.Entity<FullTimeEmployee>().Map(m =>{m.MapInheritedProperties();m.ToTable("FullTimeEmployee");});modelBuilder.Entity<HourlyEmployee>().Map(m =>{m.MapInheritedProperties();m.ToTable("HourlyEmployee");});}
生成表结构
继承映射关系 TPH、TPT、TPCEntityFramework6.0相关推荐
- Hibernate→HQL、query.list()返回数据类型、查询相关语句、分页、原生SQL、@注解、持久化对象状态及生命周期、一多关系、继承映射关系、逆向工程
HQL Query实例与表 session通用工具类 Query对象 from 类→List<类>接收 映射类 仅查询商品 查询商品及所在商家 别名 返回数据类型定义 Iterator接收 ...
- hibernate的3种继承映射关系总结——TPH,TPS,TPC
Java类中有继承关系,相应的在hibernate中,也有继承关系,子类反应到数据库中,就有多种实现形式了,子类和父类可以映射到同一张表中,子类也可以单独映射成一张表,但是用不同的标签实现,子类表和父 ...
- Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)
本篇将会以西门子PLC软件搭建ModbusTCP仿真环境,并通过仿真环境,介绍基础知识及模拟实际应用中写一个简单的通信读取PLC数据方法,并简介了编写上位机的方法. 文章目录 1. 搭建ModbusT ...
- java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系
1.EF6中通过EntityTypeConfiguration配置实体映射关系代码 public class AccountMap : EntityTypeConfiguration { public ...
- 1619 例题 Prime Distance(POJ2689 LOJ10197 UVA10140 提高+/省选-) 线性筛 映射关系 0分 筛出区间内质数 超时0分 求任意区间质数的筛子100分
总目录 在线测评地址(ybt) 只有1个测试点 在线测评地址(POJ) 无法提交 在线测评地址(LOJ) 只有1个测试点 在线测评地址(LUOGU) 要有UVA账号才能提交 1.0分代 ...
- (8)hibernate四种继承映射
一 一个类继承体系一张表 1 对象模型(java类结构) 2 映射后据库中的表 3 代码 Employee.java package com.learning;public class Employe ...
- EntityFramework Core映射关系详解
前言 Hello,开始回归开始每周更新一到两篇博客,本节我们回归下EF Core基础,来讲述EF Core中到底是如何映射的,废话少说,我们开始. One-Many Relationship(一对多关 ...
- 一步一步学Linq to sql(八):继承与关系
论坛表结构 为了演示继承与关系,我们创建一个论坛数据库,在数据库中创建三个表: 1. 论坛版块分类表 dbo.Categories: 字段名 字段类型 可空 备注 CategoryID int no ...
- Hibernate读书笔记---继承映射
对于面向对象的程序设计语言,继承.多态是两个最基本的概念.Hibernate的继承映射可以理解两个持久化类之间的继承关系. Hibernate支持几种继承映射策略,不管哪种继承映射策略,Hiberna ...
最新文章
- android 自编译 img,android源码编译生成ramdisk.img和system.img解压和使用(基于海天雄A9+android2.3.3)...
- Builder建造者设计模式
- 职场有多少IT精英透支健康和生命?
- $nextTick 源码
- C语言程序控制语句——while
- jquery获取html页面参数乱码,JS或Jquery获取浏览器URL的参数值 汉字值乱码 并转码...
- 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
- servlet 和 struts2 同时使用 以及 使用struts2标签库时报错
- android 购票代码,android完美电影购票源码
- 每天工作6小时,月入过万,这个新职业火了
- English trip EM2-PE 5B Presentation yourself favorite food Teacher:Ashley
- delphi.about.com 上的教材链接
- MySQL如何执行关联查询
- 录音文件下载_拒绝敲键盘,在线版免费好用的录音转文字工具
- docker部署springboot父子级项目+mysql+redis菜鸟教程
- 用SPSS做数据分析(1)
- 刘庆付统考计算机基础选择题答案
- 捷速pdf修改器如何在pdf中添加附件
- java 是否数字 正则_java使用正则判断是否是数字
- winedt103系统找不到指定文件_latex排版(CTeX winEdit输出“系统找不到指定的文件”的终极解决办法)...