EF--payload or not
负载加载非负载加载适用于多对多场境。
一、非负载(payload-free)加载
1.1创建表
create table Album
(
AlbumId int primary key identity(1,1),
AlbumName varchar(20)
) create table Artist
(
ArtistId int identity(1,1) primary key,
FirstName varchar(20),
MiddleName varchar(20),
LastName varchar(20)
) create table LinkTable
(
ArtistId int ,
AlbumId int ,
primary key (ArtistId, AlbumId),
foreign key (ArtistId) references Artist(ArtistId),
foreign key (AlbumId) references Album(AlbumId)
)
1.2、添加项目及数据实体对象
新建控制台项目,使用DBFirst添加生成Model对象,生成对象时选择添加的表。实体添加后如下

非负载(payload)加载时中间表LinkTable除了主键没有多余属性,EF不会将这类表生成实体而是做为实体关系生成。
1.3、数据操作
操作代码:
class Program
{
static void Main(string[] args)
{
using (var context = new EF6RecipesEntities())
{
//Artist对应多个Album
var artist = new Artist { FirstName = "Alan", LastName = "Jackson" };
var album1 = new Album { AlbumName = "Drive" };
var album2 = new Album { AlbumName = "Live at " };
artist.Albums.Add(album1);
artist.Albums.Add(album2);
context.Artists.Add(artist); // Album对应多个Artist
var artist1 = new Artist { FirstName = "Tobby", LastName = "Keith" };
var artist2 = new Artist { FirstName = "Merle", LastName = "Haggard" };
var album = new Album { AlbumName = "Honkytonk" };
artist1.Albums.Add(album);
artist2.Albums.Add(album);
context.Albums.Add(album);
context.SaveChanges(); Console.WriteLine("Artists and their albums");
var artists = context.Artists; foreach (var item in artists)
{
Console.WriteLine("{0}{1}", item.FirstName, item.LastName);
foreach (var album_temp in item.Albums)
{
Console.WriteLine("\t{0}", album_temp.AlbumName);
}
} Console.WriteLine("Artists and their albums");
var Albums = context.Albums; foreach (var item_temp in Albums)
{
Console.WriteLine("{0}", item_temp.AlbumName);
foreach (var art_temp in item_temp.Artists)
{
Console.WriteLine("\t{0}{1}", art_temp.FirstName, art_temp.LastName);
}
} Console.ReadKey();
}
}
}
运行结果如下:

二、负载(payload-rich)加载
2.1 修改表
继续使用上面的项目,删除重建LinkTable表,并清除旧数据。
--删除重建关联表
drop table linkTable
create table LinkTable
(
ArtistId int ,
AlbumId int ,
comment varchar(200),
primary key (ArtistId, AlbumId),
foreign key (ArtistId) references Artist(ArtistId),
foreign key (AlbumId) references Album(AlbumId)
)
--清空旧数据
delete from Album
delete from Artist
2.2重新生成Model实体
在项目打开实体视图,删除所有已添加的对象。再右键 选择从数据库更新模型。选择表生成后实体关系如下。

由于中间表有标量属性comment,所以EF在生成实体时会连接表做为实体生成,并且生成两个一对多关系。
2.3数据操作
class Program
{
static void Main(string[] args)
{
using (var context = new EF6RecipesEntities())
{
//Artist对应多个Album
var artist = new Artist { FirstName = "Alan", LastName = "Jackson" };
var album1 = new Album { AlbumName = "Drive" };
var linkTab = new LinkTable { Album = album1, Artist = artist, comment = "Comment1" }; var album2 = new Album { AlbumName = "Drive album2" }; linkTab = new LinkTable { Artist = artist, Album = album2, comment = "Comment2" }; context.Artists.Add(artist);
context.SaveChanges(); context.LinkTables.Add(linkTab);
context.SaveChanges(); foreach (var item in context.Artists)
{
Console.WriteLine("{0}{1}", item.FirstName, item.LastName);
foreach (var table in item.LinkTables)
{
Console.WriteLine("\t{0}{1}", table.comment, table.Album.AlbumName);
}
} Console.ReadKey();
}
}
}
2.4运行结果

2.5 最佳实践
负载(payload-rich)情形下,为了适应扩展和对应关系,这种情况下中间表设置自己的主键。
EF--payload or not的更多相关文章
- %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91
"%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...
- EF 5 最佳实践白皮书
Performance Considerations for Entity Framework 5 By David Obando, Eric Dettinger and others Publish ...
- 隐写技巧——利用JPEG文件格式隐藏payload
0x00 前言 继续对图片隐写技巧的学习,这次是对JPEG文件格式的学习和理解.同PNG文件的格式对比,JPEG文件相对简单,读取其中隐藏payload的方式大同小异,两者区别在于文件格式不同,可供利 ...
- 1.8 收集的XSS Payload
收集的XSS Payload ,可以做成字典,到时候批量测试:--------------------------------------------------------------------- ...
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
前言 对于应用程序开发者来说,通常不需要考虑太多对于Entity Framework中的变更追踪(change tracking),但是变更追踪和DetectChanges方法是栈的一部分,在这其中, ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- 使用EF CodeFirst 创建数据库
EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...
随机推荐
- springboot整合dubbo注解方式(三)
笔者用自己代码测试时候发现这个版本信息,可以没有,也可以制定一个就可以了,没有太大的问题,只是需要注意引入的依赖问题,两个jar与一个jar的问题, 然后就是接口公共依赖问题,案例是把我找的几个案例进 ...
- Spring注解实现定时功能以及Quartz定时器
一:Spring注解实现--------->Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz 1:maven配置: <!-- quartz--> <d ...
- 8. sql 片段
sql 片段: <sql id="columnBase"> `id`, `title`, `author_id` as authorId, `state`, `feat ...
- nginx 搭建 rtmp 服务器
前言 最近接手了一个跟视频监控相关的项目,用了近年来越来越流行的 Web 服务器 nginx 加上 nginx-rtmp-module 搭建 rtmp 服务器.使用了阿里云的服务器,系统 Ubuntu ...
- stdin stdout stderr 标准I/O流
Unix中一切皆文件,磁盘等设备在操作系统来看都是文件. 对文件进行操作时,需要打开这个文件,并获得文件描述符(file descriptor, fd) 而每个进程生来就有三个文件描述符绑定在它身上, ...
- Spring和EhCache整合(针对使用了Shiro)
https://blog.csdn.net/a243293719/article/details/78277895
- Mock Server利器 - Moco
Moco介绍Moco独立运行所需环境如何运行Moco启动http服务启动https服务Moco HTTPs API配置如何在配置文件添加注释约定请求Body约定接口的uri约定请求参数约定请求方法约定 ...
- java中所有开源注解收集
@resource: resource全名为@Resource ,用来激活一个命名资源(namedresource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI conte ...
- esper(2)-事件类型
1.pojo package com.ebc.eventtype.pojo.pojo1; import cn.hutool.core.collection.CollUtil; import com.e ...
- Linux关于用户信息的一些命令
1.用户增加删除[root@VM_0_13_centos ~]# useradd better407 #添加 better407 用户 [root@VM_0_13_centos ~]# passwd ...