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多实体对应单表的更多相关文章

  1. 关于EF中实体和数据表以及查询语句映射的问题

    关于EF中实体和数据表以及查询语句映射的问题? 很多人在使用的时候分不清楚 实体字段应该少于等于(数据库中的表字段或者SQL查询中的临时字段).这样在查询或者添加修改都不会出现问题 如果实体的字段大于 ...

  2. EF查询百万级数据的性能测试--单表查询

    一.起因  个人还是比较喜欢EF的,毕竟不用写Sql,开发效率高,操作简单,不过总是听人说EF的性能不是很好,也看过别人做的测试,但是看了就以为真的是那样.但是实际上到底是怎么样,说实话我真的不知道. ...

  3. EF:根据实体类生成表结构SQL

    根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...

  4. EntityFramework(EF) 单表与主从表的使用

    一.单表Reader 1 构建Reader类 public   class Reader    {       public int ReaderID { get; set; }       publ ...

  5. SQLSERVER单表CRUD通用方法

    一.适用场景 ①当你书写简单的增删改查心累了 ②当你的项目不考虑并发.高性能 ③当你追求更快速的开发效率 ④当你的业务只涉及单表 二.代码展示 ①单表Insert public bool Insert ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体

    2-6 拆分实体到多表 问题 你有两张或是更多的表,他们共享一样的主键,你想将他们映射到一个单独的实体. 解决方案 让我们用图2-15所示的两张表来演示这种情况. 图 2-15,两张表,Prodeuc ...

  7. EntityFramework 实体拆分和表拆分

    之前有人问过 EF 如何进行实体拆分和表拆分?我记得当时认为不可能,理由忘记了,后来又有人发了一段配置截图,发现原来是可以的,不记录的东西容易忘掉,关于 EF 实体拆分和表拆分,下面是自己的一些整理. ...

  8. 3.springMVC+spring+Mybatis整合Demo(单表的增删该查,这里主要是贴代码,不多解释了)

    前面给大家讲了整合的思路和整合的过程,在这里就不在提了,直接把springMVC+spring+Mybatis整合的实例代码(单表的增删改查)贴给大家: 首先是目录结构: 仔细看看这个目录结构:我不详 ...

  9. 2.Mybatis入门程序(单表的增删改成)

    这里讲的单表的增删改查,是由mapper代理的增删改查,先来看看步骤: 1.jar包的导入 2.配置全局的配置文件 3.建立接口 4.编写mapper.xml 5.测试 工程结构:这个你们自己可以调整 ...

随机推荐

  1. 用selenium工具做软件自动化测试的面试题及答案

    1.selenium中如何判断元素是否存在? 答:isElementPresent 2.selenium中hidden或者是display = none的元素是否可以定位到? 答:不可以定位到 3.s ...

  2. Vue项目中使用HighChart

    记:初次在Vue项目中使用 HighChart 的时候要走的坑 感谢这位哥们的思路 传送门 Vue-cli项目使用 npm install highcharts --save 让我们看看 highch ...

  3. Oracle 数据库创建、表空间创建、用户创建 步骤

    一.数据库创建: 1.利用数据库配置助手(DBCA,Database Configuration Assistant)图形化方式 2.创建完成之后,找到  D:\oracle\product\11.2 ...

  4. CSAPP阅读笔记-汇编语言初探(数据传送类指令)-来自第三章3.2-3.3的笔记-P115-P128

    1.如何由机器代码生成汇编代码? objdump -d再加上文件名即可直接在终端看到由反汇编器恢复的汇编代码.注意,文件名并不一定得是.o文件,任何可执行文件都可以. 结果如下: 仅列举了反汇编tes ...

  5. Session.Abandon和Session.Clear有何不同 (转)

    Session.Clear()就是把Session对象中的所有项目都删除了, Session对象里面啥都没有.但是Session对象还保留.Session.Abandon()就是把当前Session对 ...

  6. 使用not in的子查询

    operand comparison_operator [NOT] in (subquery) =ANY运算符与IN等效 !=ALL或<>ALL运算符与NOT IN 等效 如果子查询返回任 ...

  7. C# 实现IP视频监控(摄像头)画面推送(简单的不能再简单的DEMO)

    最近继续在家休息,在完成上一个Python抓取某音乐网站爬虫后,琢磨着实现一个基于HTTP推送的 IP视频监控,比如外出的时候,在家里 开启一个监控端(摄像头+服务端),可以看到实时画面,如果再加上自 ...

  8. Loadrunner—关联知识点

    一.关联定义 把脚本中某些写死的数据,转变成是撷取自服务器所发送的.动态的.每次都不一样的数据 二.什么时候需要做关联 要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程 过程说明: ...

  9. 批量修改dos文件到unix

    1. 安装dos2unix 2. 执行:find ./ -type f | xargs dos2unix

  10. KVC、KVO实现过程

    1.KVC的实现过程 以 [object setValue:@"134567" forKey:@"uid"];为例子,来探究KVC的实现过程 第一步:搜索1.首 ...