每个类型一张表【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相关推荐

  1. Hibernate→HQL、query.list()返回数据类型、查询相关语句、分页、原生SQL、@注解、持久化对象状态及生命周期、一多关系、继承映射关系、逆向工程

    HQL Query实例与表 session通用工具类 Query对象 from 类→List<类>接收 映射类 仅查询商品 查询商品及所在商家 别名 返回数据类型定义 Iterator接收 ...

  2. hibernate的3种继承映射关系总结——TPH,TPS,TPC

    Java类中有继承关系,相应的在hibernate中,也有继承关系,子类反应到数据库中,就有多种实现形式了,子类和父类可以映射到同一张表中,子类也可以单独映射成一张表,但是用不同的标签实现,子类表和父 ...

  3. Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

    本篇将会以西门子PLC软件搭建ModbusTCP仿真环境,并通过仿真环境,介绍基础知识及模拟实际应用中写一个简单的通信读取PLC数据方法,并简介了编写上位机的方法. 文章目录 1. 搭建ModbusT ...

  4. java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系

    1.EF6中通过EntityTypeConfiguration配置实体映射关系代码 public class AccountMap : EntityTypeConfiguration { public ...

  5. 1619 例题 Prime Distance(POJ2689 LOJ10197 UVA10140 提高+/省选-) 线性筛 映射关系 0分 筛出区间内质数 超时0分 求任意区间质数的筛子100分

    总目录 在线测评地址(ybt)   只有1个测试点 在线测评地址(POJ)   无法提交 在线测评地址(LOJ)   只有1个测试点 在线测评地址(LUOGU)   要有UVA账号才能提交 1.0分代 ...

  6. (8)hibernate四种继承映射

    一 一个类继承体系一张表 1 对象模型(java类结构) 2 映射后据库中的表 3 代码 Employee.java package com.learning;public class Employe ...

  7. EntityFramework Core映射关系详解

    前言 Hello,开始回归开始每周更新一到两篇博客,本节我们回归下EF Core基础,来讲述EF Core中到底是如何映射的,废话少说,我们开始. One-Many Relationship(一对多关 ...

  8. 一步一步学Linq to sql(八):继承与关系

    论坛表结构 为了演示继承与关系,我们创建一个论坛数据库,在数据库中创建三个表: 1.  论坛版块分类表 dbo.Categories: 字段名 字段类型 可空 备注 CategoryID int no ...

  9. Hibernate读书笔记---继承映射

    对于面向对象的程序设计语言,继承.多态是两个最基本的概念.Hibernate的继承映射可以理解两个持久化类之间的继承关系. Hibernate支持几种继承映射策略,不管哪种继承映射策略,Hiberna ...

最新文章

  1. android 自编译 img,android源码编译生成ramdisk.img和system.img解压和使用(基于海天雄A9+android2.3.3)...
  2. Builder建造者设计模式
  3. 职场有多少IT精英透支健康和生命?
  4. $nextTick 源码
  5. C语言程序控制语句——while
  6. jquery获取html页面参数乱码,JS或Jquery获取浏览器URL的参数值 汉字值乱码 并转码...
  7. 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
  8. servlet 和 struts2 同时使用 以及 使用struts2标签库时报错
  9. android 购票代码,android完美电影购票源码
  10. 每天工作6小时,月入过万,这个新职业火了
  11. English trip EM2-PE 5B Presentation yourself favorite food Teacher:Ashley
  12. delphi.about.com 上的教材链接
  13. MySQL如何执行关联查询
  14. 录音文件下载_拒绝敲键盘,在线版免费好用的录音转文字工具
  15. docker部署springboot父子级项目+mysql+redis菜鸟教程
  16. 用SPSS做数据分析(1)
  17. 刘庆付统考计算机基础选择题答案
  18. 捷速pdf修改器如何在pdf中添加附件
  19. java 是否数字 正则_java使用正则判断是否是数字
  20. winedt103系统找不到指定文件_latex排版(CTeX winEdit输出“系统找不到指定的文件”的终极解决办法)...

热门文章

  1. 远程接入构建企业信息的计划时代--极通EWEBS
  2. 你有没有扔过一枚硬币选择正反面?
  3. 转:读AD里特殊的属性in C#
  4. 代码中的输入输出(重定向、文件流C/C++)
  5. 解答关于学习前端的一些问题
  6. 交叉验证 Cross-validation
  7. Eclipse打包工具 FatJAR
  8. log4j打印mybatis sql语句
  9. Notepad2 一个很不错的记事本
  10. Microsoft SharePoint Server 2016 部署文档(2)