EF多实体对应单表
1、EF多实体对应单表
适用场景:单数据库表,表数据有较长用字段,有不常用或者大数据字段。
2、建表语句
- CREATE TABLE [Chapter2].[Photograph](
- [PhotoId] [int] IDENTITY(1,1) primary key NOT NULL,
- [Title] [varchar](50) NOT NULL,
- [ThumbnailBits] [image] NOT NULL,
- [HighResolutionBits] [image] NOT NULL
- )
3、新建控制程序,添加EntityFramework 引用。
4、创建两个实体实体,实体由同一个表不同字段组成。
- public class PictureContext : DbContext
- {
- public DbSet<Photograph> Photographs { get; set; }
- public DbSet<PhotographFullImage> PhotographFullImage { get; set; }
- public PictureContext() : base("EFRecipesEntities")
- {
- }
- protected override void OnModelCreating(DbModelBuilder modelBuilder)
- {
- base.OnModelCreating(modelBuilder);
- modelBuilder.Entity<Photograph>()
- .HasRequired(p => p.PhotographFullImage)
- .WithRequiredPrincipal(p => p.Photograph);
- modelBuilder.Entity<Photograph>().ToTable("Photograph", "Chapter2");
- modelBuilder.Entity<PhotographFullImage>().ToTable("Photograph", "Chapter2");
- }
- }
- public class Photograph
- {
- [Key]
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int PhotoId { get; set; }
- public string Title { get; set; }
- public byte[] ThumbnailBits { get; set; }
- [ForeignKey("PhotoId")]
- public virtual PhotographFullImage PhotographFullImage { get; set; }
- }
- public class PhotographFullImage
- {
- [Key]
- public int PhotoId { get; set; }
- public byte[] HighResolutionBits { get; set; }
- [ForeignKey("PhotoId")]
- public virtual Photograph Photograph { get; set; }
- }
注意图中指定Photograph实体需要(HasRequired) PhotographFullImage实体,并通过WithRequiredPrincipal,指定主键由Photograph负责。
5、修改Main程序如下:
- static void Main(string[] args)
- {
- byte[] thumbBits = new byte[];
- byte[] fullBits = new byte[];
- using (var context = new PictureContext())
- {
- var photo = new Photograph
- {
- Title = "My Dog",
- ThumbnailBits = thumbBits
- };
- var fullImage = new PhotographFullImage { HighResolutionBits = fullBits };
- photo.PhotographFullImage = fullImage;
- context.Photographs.Add(photo);
- context.SaveChanges();
- }
- using (var context = new PictureContext())
- {
- foreach (var photo in context.Photographs)
- {
- Console.WriteLine("Photo: {0}, ThumbnailSize {1} bytes",
- photo.Title, photo.ThumbnailBits.Length);
- // explicitly load the "expensive" entity,
- context.Entry(photo).Reference(p => p.PhotographFullImage).Load();
- Console.WriteLine("Full Image Size: {0} bytes",
- photo.PhotographFullImage.HighResolutionBits.Length);
- }
- }
- Console.ReadKey();
- }
EF多实体对应单表的更多相关文章
- 关于EF中实体和数据表以及查询语句映射的问题
关于EF中实体和数据表以及查询语句映射的问题? 很多人在使用的时候分不清楚 实体字段应该少于等于(数据库中的表字段或者SQL查询中的临时字段).这样在查询或者添加修改都不会出现问题 如果实体的字段大于 ...
- EF查询百万级数据的性能测试--单表查询
一.起因 个人还是比较喜欢EF的,毕竟不用写Sql,开发效率高,操作简单,不过总是听人说EF的性能不是很好,也看过别人做的测试,但是看了就以为真的是那样.但是实际上到底是怎么样,说实话我真的不知道. ...
- EF:根据实体类生成表结构SQL
根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...
- EntityFramework(EF) 单表与主从表的使用
一.单表Reader 1 构建Reader类 public class Reader { public int ReaderID { get; set; } publ ...
- SQLSERVER单表CRUD通用方法
一.适用场景 ①当你书写简单的增删改查心累了 ②当你的项目不考虑并发.高性能 ③当你追求更快速的开发效率 ④当你的业务只涉及单表 二.代码展示 ①单表Insert public bool Insert ...
- 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体
2-6 拆分实体到多表 问题 你有两张或是更多的表,他们共享一样的主键,你想将他们映射到一个单独的实体. 解决方案 让我们用图2-15所示的两张表来演示这种情况. 图 2-15,两张表,Prodeuc ...
- EntityFramework 实体拆分和表拆分
之前有人问过 EF 如何进行实体拆分和表拆分?我记得当时认为不可能,理由忘记了,后来又有人发了一段配置截图,发现原来是可以的,不记录的东西容易忘掉,关于 EF 实体拆分和表拆分,下面是自己的一些整理. ...
- 3.springMVC+spring+Mybatis整合Demo(单表的增删该查,这里主要是贴代码,不多解释了)
前面给大家讲了整合的思路和整合的过程,在这里就不在提了,直接把springMVC+spring+Mybatis整合的实例代码(单表的增删改查)贴给大家: 首先是目录结构: 仔细看看这个目录结构:我不详 ...
- 2.Mybatis入门程序(单表的增删改成)
这里讲的单表的增删改查,是由mapper代理的增删改查,先来看看步骤: 1.jar包的导入 2.配置全局的配置文件 3.建立接口 4.编写mapper.xml 5.测试 工程结构:这个你们自己可以调整 ...
随机推荐
- [转] vagrant学习笔记 - provision
[From] https://blog.csdn.net/54powerman/article/details/50684844 从字面上来看,provision是准备,实现的功能是在原生镜像的基础 ...
- 解决bootstrap中显示不了本地字体图标
正在用bootstrap写一个登录界面时,准备用一个图标 但实际效果是: 可以看到图标并没有显示出来,百度一下,发现有可能是路径问题. 自己的目录关系和引用方式如下分别为: Ctrl+左键进入glyp ...
- ORC Files
ORC 全称是Optimized Row Columnar,意思是优化的RC file,优化行列式. ORC 文件格式提供了一个很高效的方式来存储hive数据.它旨在克服其他hive文件格式的限制.当 ...
- 自学springboot
参考资料 https://www.renren.io/guide/
- RHCE 入门 第一篇
随着工作压力越来越大,我们越需要技术储备. 从2017年10月14日开始参加RHCE培训
- 使用express、react、webpack打包、socket.io、mongodb、ant.design、less、es6实现聊天室
拿到一个项目,我们应该如何去完成这个项目呢. 是直接上手? 还是先进行分析,然后再去解决呢?毫无疑问,如果直接上手解决,那么可能会因为知道目标所在,而导致出现各种问题. 所以,我们应该系统的分析这个项 ...
- PHP面向对象的基本原则
对象内部是高内聚的 ——对象只负责一项特定的功能(职能可大可小) ——所有对象相关的内容都封装到对象内部 高内聚就是该有的都有,用的时候不会缺胳膊少腿! 对象对外是低耦合的 ——外部世界可以看到对象的 ...
- LinuxShell脚本编程基础1-vi编辑器的使用
1.输入模式与命令模式的切换 按 [Esc]键 切换到 命令模式: 2.保存与退出 :w mytest.txt 保存文件名 :q 退出 :q! 强制退出 :wq 保存并退出 3.插入文本命令 i 在 ...
- datepicker97切换年月日再连续点击下拉中日期的bug出现问题
解决办法: function wdateOption(fmt){ if(fmt===undefined){fmt="yyyy-MM-dd"} return{ dateFmt:fmt ...
- elasticsearch 初步
本文主要内容: 1.elasticsearch的认识(是个啥,能干啥) 2.安装启动.简单集群及关键配置 3.名词解释 4.存取数据,中文分词 ---------------------------- ...